C#の変数初期化は、C#が安全性を重視しているもう一つの例です。簡単に言えば、C#コンパイラは、操作中に変数を参照する前に、その変数を何らかの初期値で初期化する必要があります。ほとんどの最新コンパイラは初期化されていないことを警告としてマークしますが、C#コンパイラはそれをエラーとして扱います。これにより、他のプログラムが残したメモリから誤ってゴミ値を取得することを防ぐことができます。

C#の変数初期化には、変数が使用前に初期化されていることを保証する2つの方法があります:

  • 変数がクラスまたは構造体のフィールドである場合、明示的に初期化されなければ、これらの変数が作成されるとき、その値はデフォルトで次のようになります:0(クラスと構造体については後で説明します)。
  • メソッドのローカル変数は、ステートメントでその値を使用する前に、コード内で明示的に初期化する必要があります。このとき、初期化は変数の宣言時に行われるのではなく、コンパイラはメソッド内のすべての可能な経路をチェックし、ローカル変数が初期化される前にその値が使用されたことを検出すると、エラーが発生します。

C#の方法はC++の方法とは逆です。C++では、コンパイラはプログラマに変数が使用前に初期化されていることを確認させます。Visual Basicでは、すべての変数は自動的にその値が次のように設定されます:0。

C#変数初期化の実例解析

例えば、C#では次のステートメントを使用することはできません:

public static int Main(){ int d; Console.WriteLine(d); // エラー! 使用前に初期化する必要があります }

このコードでは、Main()をvoidではなくint型のデータを返すように定義する方法が示されていることに注意してください。

これらのコードをコンパイルすると、次のエラーメッセージが表示されます:

Use of unassigned local variable 'd' 

次のステートメントを考えてみましょう:

Something objSomething; 

C++では、上記のコードはスタック上にSomethingクラスのインスタンスを作成します。C#では、このコード行はSomethingオブジェクトへの参照を作成するだけで、この参照はまだどのオブジェクトも指していません。この変数に対してメソッドまたはプロパティを呼び出すとエラーが発生します。

C#で参照オブジェクトをインスタンス化するには、newキーワードを使用する必要があります。前述のように、参照を作成し、newキーワードを使用してその参照をヒープ上に格納されたオブジェクトにポイントさせます:

objSomething = new Something();  

原文アドレス:https://www.cnblogs.com/shiguangshuo/p/4842144.html