加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-17 00:01:58 所属栏目:大数据 来源:网络整理
导读:我刚刚了解了VB.NET中静态局部变量的用法,并想知道它在延迟加载属性中的潜在用途. 请考虑以下示例代码. Public Class Foo Implements IFooEnd ClassPublic Interface IFooEnd InterfacePublic Class Bar Private _fooImplementation As IFoo Public ReadOnly
我刚刚了解了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 Class来获取(据我所知)相同的行为.

现在,让我们在使用静态变量时查看属性.

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)类.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读