C#の「new」キーワードとは?使い方をわかりやすく解説
C#における「new」キーワードは、主にオブジェクト(インスタンス)の生成や配列の作成に使用されます。この記事では、newキーワードの基本的な役割と、実際のコード例を使った具体的な使い方を解説します。
配列を作成する際のnewキーワード
newキーワードを使用すると、配列のインスタンスを作成できます。以下のように記述します。
int[] a = new int[5];
この例では、int型の要素を5つ持つ配列がメモリ上に確保され、変数aに割り当てられます。
オブジェクトを生成する際のnewキーワード
new演算子は、クラスからオブジェクトを生成(インスタンス化)するために使われます。次の例では、NumberManipulatorクラスのオブジェクトをnewキーワードで作成しています。
サンプルコード
using System;
namespace CalculatorApplication {
class NumberManipulator {
public void swap(int x, int y) {
int temp;
temp = x; /* xの値を保存 */
x = y; /* yの値をxへ代入 */
y = temp; /* tempの値をyへ代入 */
}
static void Main(string[] args) {
// newキーワードでオブジェクトを生成
NumberManipulator n = new NumberManipulator();
/* ローカル変数の定義 */
int a = 100;
int b = 200;
Console.WriteLine("Before swap, value of a : {0}", a);
Console.WriteLine("Before swap, value of b : {0}", b);
/* 値を入れ替える関数を呼び出し */
n.swap(a, b);
Console.WriteLine("After swap, value of a : {0}", a);
Console.WriteLine("After swap, value of b : {0}", b);
Console.ReadLine();
}
}
}実行結果
Before swap, value of a : 100 Before swap, value of b : 200 After swap, value of a : 100 After swap, value of b : 200
このコードでは、new NumberManipulator()によって新しいオブジェクトがヒープ上に作成され、その参照が変数nに格納されます。これにより、nを通じてswapメソッドを呼び出せるようになります。
newキーワードのその他の用途
C#のnewキーワードには、上記以外にも以下のような用途があります。
- メンバーの非表示(シャドウイング): 派生クラスで基底クラスと同じ名前のメンバーを定義する際に、
new修飾子を付けることで基底クラスのメンバーを意図的に隠すことができます。 - ジェネリック型制約:
where T : new()のように記述することで、「引数なしのコンストラクタを持つ型のみを受け入れる」という制約をジェネリック型に課せます。
まとめ
C#のnewキーワードは、配列やオブジェクトのインスタンスを生成するために不可欠な機能です。また、メンバーの隠ぺいやジェネリック制約など、状況に応じたさまざまな使い方がある点も覚えておくと良いでしょう。
-
Java 9におけるアンダースコア(_)キーワードとは?識別子として使えなくなった理由とエラー例を解説
Java 9でのアンダースコアの扱いの変更点以前のバージョンのJavaでは、アンダースコア(「_」)は識別子として利用でき、変数名を作成する際にも自由に使用することができました。しかし、Java 9以降では、アンダースコア文字は予約語(キーワード)として扱われるようになり、識別子や変数名として使用することはできません。そのため、単一のアンダースコア文字を識別子として記述した場合、プログラムはコンパイルに失敗し、コンパイル時エラーが発生します。なお、実はJava 8の時点でアンダースコアを識別子として使うと警告が出るようになっており、Java 9で完全に禁止されたという経緯があります。これは、将
-
JavaのStrictMathクラスとは?主なメソッドと使い方を解説
java.lang.StrictMathはfinalクラスであり、Objectクラスのサブクラスです。このクラスには、指数関数・対数関数・平方根や三角関数といった初等的な数値演算を実行するためのメソッドが多数含まれています。 StrictMathクラスのすべてのメソッドはstaticメソッド(静的メソッド)として定義されているため、インスタンスを生成する必要はありません。クラス名を直接指定してメソッドを呼び出すだけで利用できます。 主なメソッド一覧 StrictMathクラスでよく使われるメソッドには以下のようなものがあります。 abs():絶対値を返す acos() / asin()