次の二つの
答えて
ローカル変数の場合、最初の変数は絶対に割り当てられません。2番目の変数は絶対に割り当てられません。例えば:
void DoesntCompile()
{
A a;
string x = a.ToString(); // Can't use a - it's not definitely assigned
}
void CompilesButGoesBang()
{
A a = null;
string x = a.ToString(); // Throws a NullReferenceException
}
フィールド(静的またはインスタンス)のために、A
が参照型である場合、それはおそらく、任意の違いはありません。私はは、静的変数の場合の違いを実証するプログラムを書くことができますが、反射...厄介なを使用して静的型の初期化子を2回実行することに依存するでしょう。
あなたがなぜ尋ねているのかについてより多くの文脈を与えることができれば、それは本当に助けになるでしょう。
私はちょうどC#参照型を宣言すると、デフォルトのnullはありません。私は値の型を宣言すると、それはデフォルト値を持っている必要があります、そう思いますか? – user496949
@ user496949:いいえ、ローカル変数ではありません。 mutable構造体でできることはありますが、最初は空の変数にフィールドを代入しますが、 'int'のようなものを使用すると、ローカル変数と同じ動作が文字列ローカル変数と同じになります。 –
@ user496949を*変数として扱います:no:値の型にも初期値がありません(割り当てられていない構造体のすべてのフィールドを*割り当てる*エッジケースの方法がありますが、 )。簡単な答えは、 "変数は初期値を持たず、フィールドは型のデフォルト値を取得" –
C#では、変数はhereのルールに従ってデフォルト設定されています。
これらの2つの主な違いは、ケース2の場合、変数が「確実に割り当てられた」と考えることができることです。変数の使用方法によっては、コンパイラが特定の操作を許可する前に、その変数を確実に割り当てる必要があるかもしれません。明確な割り当てについては、this noteを参照してください。
それぞれの型はデフォルト値を持っているので、コンパイラが未割り当てのローカル変数を使用しないようにする理由は、次のことを理解したいだけです。 – user496949
参考資料は*右*ですが、VS 2003のドキュメントから切り離す時間があるかもしれません。 –
@ user496949両方の回答はすでにあなたに語っています。 "明確な割り当て" - これは仕様の中で(変数のために)要求されます。 –
- 1. 次の二つ
- 2. CSSは次の二つの要素
- 3. 私は同じサイズの文字列を、次の二つのリスト持っている二つのリストのメンバーが
- 4. ハスケルの二次計画
- 5. 変数の二次変換
- 6. 二次元のChar配列
- 7. は、2つの配列と、私は、次の二つの配列を持つキー
- 8. は、SQL Serverで次の二つの可能なスケジュールをゲット
- 9. 私は次のコードを持っている二つのリスト
- 10. 二次ベジエ補間
- 11. has_many:through二次多型
- 12. 二つのGridView
- 13. 二つのテーブル
- 14. 二つのテーブル
- 15. 二つの数
- 16. 二次元ゲームのためのUnity
- 17. 二次元配列を二重に渡す際のエラーfunction_name
- 18. ジップ二つのリスト
- 19. マッチング二つのリスト
- 20. 二つのタイプが
- 21. 二つの変数
- 22. 二つの日付
- 23. は、二つのフィールド
- 24. 二つの属性
- 25. 二つの配列
- 26. SQL - 二つのテーブル
- 27. チェック二つのテーブル
- 28. 二つのコントローラMVC
- 29. 二つの質問
- 30. 最大二次元サブセット和
http://stackoverflow.com/questions/589920/default-value-of-a-variable-at-the-time-of-declaration-in-c-and-vb – alexandrul