1. ホーム
  2. vb.net

[解決済み] インスタンス化」と「初期化」の違いは何ですか?

2022-09-11 09:44:31

質問

MicrosoftのVB.NETのチュートリアルで、この2つの単語が使われているのを耳にしました。変数に関連して使用される場合、これらの 2 つの単語の違いは何ですか?

どのように解決するのですか?

参照型に対する値

変数 は、2つのグループのうちの1つに分類されます。 タイプか 参照 のような型があります。のようなタイプ intDateTime の型である。これに対して、作成するクラスはすべて 参照 型になります。また、C#の文字列は 参照 型になります。.NETフレームワークのほとんどのものは 参照 型です。

変数のパーツ

変数があり という名前です。 という変数があり、その . 2つのパーツ .

変数の 名前 は、あなたが 宣言する とする。その は、あなたが を割り当てる を指定します。

変数が初期化される

すべての変数には、常に 初期値 の値が与えられます。 が宣言された時点で . したがって、すべての変数は 初期化されます。 .

については のようなタイプは int のように、明示的に指定しなければ、コンパイラはそれらに有効な値を与えます。 int 's 初期化 はデフォルトでゼロになります。 DateTime 's 初期化 から DateTime.MinValue をデフォルトで使用します。

参照 型変数 初期化 を渡したオブジェクトに初期化します。コンパイラは を割り当てます。 にオブジェクト(すなわち有効な値)を割り当てなければなりません。この場合、値は null - のように何もありません。ということで、参照先は 初期化 をnullにします。

オブジェクトのインスタンス化

人間は生まれる。オブジェクトはインスタンス化される。赤ちゃんは インスタンス であり、オブジェクトは インスタンス であり、あるクラスのインスタンスです。

を作成する行為は インスタンス と呼ばれるものです。 インスタンス化 (ジャジャーン!)

そこで 宣言する , 初期化 そして インスタンス化 はこのようにまとまります。

MyClass myClassyReference = new MyClass();

上記で、"... のインスタンスを作成する、というのは誤りです。 オブジェクトのインスタンスを作成する ..."です。


edit - コメントによる議論に触発されて

3つの異なることが、異なる用語を用いて進行しており(上記)、その用語は互換性がありません :

  1. 参照変数が宣言されています。 MyClass myClassyReference
  2. オブジェクトのインスタンス化 (...から/与えられた クラス から、または暗黙のうちに) new MyClass()
  3. オブジェクトは変数に代入される。 = .

事実を再確認する。

  1. 参照型変数は、単に "参照" とも呼ばれます。値型変数(quot;value-type variable)は参照ではありません。

  2. この: "objectA is an instance of an object"は深く間違っています。もし objectA が objectB のインスタンスであるなら、objectA は objectB のタイプ (それが何であれ) と現在の状態 (それが何であれ) で人生を始めるということでなければなりません。オブジェクトBの変化に合わせてオブジェクトD、E、Fを作るというのはどうでしょうか?いやだ、いやだ! オブジェクトはその型、定義、および値をクラスから取得します。

  3. MyClass myClassyReference = null 一般的に、私たちは "the variable is assigned to null" とは言いませんし、"the variable is referencing null" とも決して言いません。

実用的なアプリケーションです。

  • あなたのコードを指差して、"このインスタンスは無効なプロパティを持っていると言います。おそらくそれがループが失敗する理由です。インスタンス生成時にパラメータを検証する必要があります。

  • 私はあなたのコードでこれを参照してください。

     MyClass myClassyReference;
     myClassyReference.DoSomething();
    
    

    nullなので、何も参照されていません。そのため、メソッド呼び出しは例外を投げます。

編集を終了する


存在の耐えられない軽さ

A 参照型 変数の名前と値は独立して存在します。そして、私は独立していることを意味します。

というのは インスタンス化された オブジェクトは、それへの参照を持つことも持たないこともあります。

ある インスタンス化された オブジェクトはそれに対する多くの参照を持つことができます。

A が宣言した の参照は を指している オブジェクトを指しているかもしれません。