gpt4 book ai didi

vb.net - VB.NET延迟加载属性中静态局部变量的使用

转载 作者:行者123 更新时间:2023-12-04 20:20:09 30 4
gpt4 key购买 nike

我最近刚刚了解了 VB.NET 中静态局部变量的使用,并想知道它在延迟加载属性中的潜在用途。

考虑以下示例代码。

Public Class Foo
Implements IFoo
End Class

Public Interface IFoo
End Interface

Public Class Bar

Private _fooImplementation As IFoo
Public ReadOnly Property FooImplementation As IFoo
Get
If _fooImplementation Is Nothing Then _fooImplementation = New Foo
Return _fooImplementation
End Get
End Property
End Class

这将是一个通常的、简化的延迟加载属性。您甚至可能想要使用通用的 Lazy 类来获得(据我所知)相同的行为。

现在,让我们看看使用静态变量时的属性。
Public Class Bar

Public ReadOnly Property FooImplementation As IFoo
Get
Static _fooImplementation as IFoo = New Foo
Return _fooImplementation
End Get
End Property
End Class

据我所知,这比通常的实现有一些优势,主要是您无法访问属性之外的变量,以及不必使用额外的变量。

我要问你的问题是:哪些是“正确”的方法?我知道静态变量有额外的开销,但在我个人看来,创建更容易被误用的更清晰的代码是否足够糟糕?与“传统”方法相比,您损失了多少性能?与大工厂相比,小类教学有何重要意义?

提前致谢。

最佳答案

Static 关键字有相当多的开销,编译器会生成一大块 IL 来实现它。您的第一个代码段没有做的是确保线程不会导致问题。如果这不是问题,那么您的第一个片段会便宜很多。不仅因为它的 IL 少得多,还因为它将被内联。带有静态的 getter 永远不会被内联,因为它包含 Try/Finally 代码。

如果您的目标是 .NET 4,那么您绝对应该看看 Lazy(Of T) 类。

关于vb.net - VB.NET延迟加载属性中静态局部变量的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7474741/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com