6

Lazyのこの2つの使用法の違いと、どちらを使用するのがより適切かを理解しようとしていますか、それともまったく同じですか?

Dim context As New Lazy(Of DbContext)

Dim context As Lazy(Of DbContext) = New Lazy(Of DbContext)(Function() New DbContext())
4

2 に答える 2

5

ラムダが既定のコンストラクターを使用してインスタンスを構築する以外に何もしていない場合、Lazy<T>デリゲートなしのコンストラクターは型の既定のコンストラクターを使用するだけなので、効果は同じです。その場合、私はあなたの最初のオプションを使用します。

ただし、2 番目のオプションの理由は、オブジェクトを構築するために、より多くの情報が必要になる場合があるためです。たとえば、これは合法であり、正しく機能します。

Dim instance = New Lazy(Of SomeType)(Function() New SomeType("Foo"))

ここでは、デフォルト以外のコンストラクタを に使用していることに注意してくださいSomeType

于 2013-01-30T01:17:01.547 に答える
1

この文

Dim context As Lazy(Of DbContext) = New Lazy(Of DbContext)(Function() New DbContext())

機能的にはこれと同等です:

Dim context As New Lazy(Of DbContext)(Function() New DbContext())

したがって、 Lazy クラスのこれら 2 つのコンストラクターの使用法は次のとおりです。

  1. Lazy(Of T) コンストラクター
  2. Lazy(Of T) コンストラクター (Func(Of T))

MSDNによると、(1)について:

遅延初期化が発生すると、ターゲット型の既定のコンストラクターが使用されます。

(2) の場合:

遅延初期化が発生すると、指定された初期化関数が使用されます。

したがって、デフォルトのコンストラクターを使用してオブジェクトを作成できる場合は (1) を選択し、それ以外の場合は (2) を選択します。T のデフォルト以外のコンストラクター、または親型のコンストラクターを使用できることに注意してください。これも機能します (String継承元Object):

Dim obj As New Lazy(Of Object)(Function() "123")
于 2013-01-30T02:36:53.143 に答える