1

以下の 2 つの例の違いは何ですか? の目的は何Activatorですか? なぜ使用するのですか?

1.

string objTypeName = "Foo";
Foo foo = (Foo)Activator.CreateInstance(Type.GetType(objTypeName));

2.

Foo foo = new Foo()

以下にリンクされているページの下を調べましたが、明確な画像が得られませんでした。

ここここ、そしてここ

4

3 に答える 3

2

を使用Activator.CreateInstanceすると、所属するクラス(Reflectionなど)に直接アクセスできない場合でもオブジェクトを作成できるため、たとえば、別のオブジェクトと同じタイプのオブジェクトを作成できます。

var duplicate = Activator.CreateInstance(original.GetType());

元のオブジェクトのクラスを正確に知らない場合、これは不可能です。

于 2012-11-07T17:58:52.350 に答える
2

設計時にインスタンス化するタイプがわかっている場合は、 を使用する必要はありませんActivator.CreateInstance。すべてActivator.CreateInstanceは、パブリックのデフォルト コンストラクターを呼び出すことです。

Activator.CreateInstanceTypeは、設計時に不明な をインスタンス化する場合に役立つ「レイト バインディング」の 1 つの形式です。設計時に具象クラスの型がすでにわかっている場合は、「アーリー バインディング」を使用してインスタンス化することをお勧めします。これは、はるかに高速でシンプルで明白です。つまり、適切なコンストラクターを直接呼び出します。

于 2012-11-07T18:10:58.477 に答える
1

Activator.CreatInstanceは、クラスFooのデフォルトコンストラクターを呼び出します。

唯一の違いは、タイプよりもタイプがわかっている場合は、それを作成するnew方がはるかに理にかなっている(そして読みやすさ)ということです。

于 2012-11-07T17:58:53.843 に答える