You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何显式定义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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 11:09:52