我正在试图弄清楚这两种懒惰用法之间的区别,哪种更合适,或者它是否相同?
Dim context As New Lazy(Of DbContext)
Dim context As Lazy(Of DbContext) = New Lazy(Of DbContext)(Function() New DbContext())
答案 0 :(得分:3)
如果lambda只是使用默认构造函数构建实例,那么效果是相同的,因为没有委托的Lazy<T>
的构造函数只使用类型的默认构造函数。在那种情况下,我会使用你的第一个选项。
然而,第二个选项的原因是您有时需要更多信息来构建对象。例如,这将是合法的并且功能正常:
Dim instance = New Lazy(Of SomeType)(Function() New SomeType("Foo"))
请注意,我们在SomeType
使用了非默认构造函数。
答案 1 :(得分: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 class的这两个构造函数:
根据MSDN,(1):
当延迟初始化发生时,目标的默认构造函数 使用类型。
对于(2):
当进行延迟初始化时,指定初始化函数 使用。
因此,如果使用默认构造函数创建对象适合您,请选择(1),否则(2)。请注意,您可以使用T的非默认构造函数,甚至父类型的构造函数,因此这也可以(String
继承自Object
):
Dim obj As New Lazy(Of Object)(Function() "123")