为何显式定义Get访问器时,自动实现属性的隐藏私有变量不可用?
VB自动实现属性与显式访问器的字段差异问题
我编写了如下VB代码:
Public ReadOnly Property LazyLoadingMarket As MarketPairInanExchange Get _LazyLoadingMarket = Nothing Return Nothing End Get End Property运行时提示
_LazyLoadingMarket不存在,添加Private _LazyLoadingMarket即可解决。但为何显式定义Get访问器后,自动实现属性的隐藏私有变量会消失?
问题解析
这是VB中自动实现属性和手动实现属性的核心区别:
- 当使用自动实现属性(仅声明属性,不编写
Get/Set访问器)时,编译器会自动生成对应的隐藏私有字段,命名规则为属性名前加下划线,比如属性LazyLoadingMarket对应的隐藏字段就是_LazyLoadingMarket,无需手动声明。 - 一旦显式编写
Get(或Set)访问器,该属性就变为手动实现属性。编译器会默认你要完全掌控属性逻辑,因此不再自动生成隐藏私有字段。此时代码中若引用_LazyLoadingMarket,必须手动声明这个私有变量,否则编译器会报错提示变量不存在。
对比示例
自动实现属性(编译器自动生成字段):
Public ReadOnly Property LazyLoadingMarket As MarketPairInanExchange编译器会自动生成:
Private ReadOnly _LazyLoadingMarket As MarketPairInanExchange手动实现属性(需手动声明字段):
Private _LazyLoadingMarket As MarketPairInanExchange Public ReadOnly Property LazyLoadingMarket As MarketPairInanExchange Get _LazyLoadingMarket = Nothing Return Nothing End Get End Property
内容的提问来源于stack exchange,提问作者user4951
相关产品推荐
相关产品推荐

