我正在努力弄清楚Lazy的这两种用法之间的区别,哪一种更适合使用,还是它们是相同的?
Dim context As New Lazy(Of DbContext)
Dim context As Lazy(Of DbContext) = New Lazy(Of DbContext)(Function() New DbContext())
我正在努力弄清楚Lazy的这两种用法之间的区别,哪一种更适合使用,还是它们是相同的?
Dim context As New Lazy(Of DbContext)
Dim context As Lazy(Of DbContext) = New Lazy(Of DbContext)(Function() New DbContext())
Lazy<T>
的构造函数相同,不使用委托函数,只使用类型的默认构造函数。在这种情况下,建议使用第一种选项。Dim instance = New Lazy(Of SomeType)(Function() New SomeType("Foo"))
SomeType
的非默认构造函数。这个声明
Dim context As Lazy(Of DbContext) = New Lazy(Of DbContext)(Function() New DbContext())
与此功能上等同的是:
Dim context As New Lazy(Of DbContext)(Function() New DbContext())
因此,我们现在只需要使用这两个Lazy类的构造函数:
根据MSDN,对于(1):
当进行延迟初始化时,将使用目标类型的默认构造函数。
对于(2):
当进行延迟初始化时,将使用指定的初始化函数。
因此,如果使用默认构造函数创建对象适用于您,请选择(1),否则选择(2)。请注意,您可以使用T的非默认构造函数,甚至可以使用父类型的构造函数,例如(String
继承自Object
):
Dim obj As New Lazy(Of Object)(Function() "123")