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

c# – 私有范围的变量仅供在属性中使用

发布时间:2020-12-16 01:51:05 所属栏目:百科 来源:网络整理
导读:是否有可能有一个变量,它是一个类中的实例变量,但只能由特定的属性访问? 我经常创造像这样的“自我创造”属性…… private IWGSLocation _location;public IWGSLocation Location{ get { _location = _location ?? new WGSLocation(); _location.Latitude =
是否有可能有一个变量,它是一个类中的实例变量,但只能由特定的属性访问?

我经常创造像这样的“自我创造”属性……

private IWGSLocation _location;
public IWGSLocation Location
{
    get
    {
        _location = _location ?? new WGSLocation();
        _location.Latitude = Latitude.GetValueOrDefault(0);
        _location.Longitude = Longitude.GetValueOrDefault(0);
        return _location;
    }
}

这意味着我不会每次访问该属性时重新创建一个新的WGSLocation(或者我需要的任何其他类型的对象,创建起来可能很昂贵,或者可能只需要创建一次).缺点是我的类可以访问_location变量.但我真的不想要它,所以如果有任何方法有一个只能在属性本身内使用的实例变量?

我正在思考这些问题……

public IWGSLocation Location
{
    get
    {
        WGSLocation _location = _location ?? new WGSLocation();
        _location.Latitude = Latitude.GetValueOrDefault(0);
        _location.Longitude = Longitude.GetValueOrDefault(0);
        return _location;
    }
}

解决方法

我同意拥有持久性本地化是一个很好的语言特性 – 即,其生命周期基于实例的生命周期但其范围(程序文本的区域,通过名称访问变量是合法的)的变量是当地的.像某些语言一样,拥有“静态”本地人也会很不错.

遗憾的是,这不是C#的一个功能,我们没有计划添加它.很高兴拥有,但很高兴不足以证明费用,或推迟或取消“更好的”功能.

它只是“很高兴”,因为当然如果你有一个私有字段,它已经是该类的私有实现细节.如果您不希望它在属性外部使用,则不要编写在属性外部使用它的代码.如果你的一个同事试图这样做,那就在代码审查中把它们放在一边.

我想我可能会补充一点:在编写改变状态的属性getter时要非常小心.默认情况下,在查看调试器中的对象时会对属性getter进行求值,调试内容并让调试器更改字段值只是因为您正在检查对象,这可能会让您感到非常困惑.

(编辑:李大同)

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

    推荐文章
      热点阅读