c# - 私有(private)范围变量仅在属性内使用

标签 c# properties

是否可以有一个变量,该变量是类中的实例变量,但只能由特定属性访问?

我经常像这样创建“ self 创建”的属性......

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;
    }
}

最佳答案

我同意拥有持久局部变量会是一个很好的语言特性——也就是说,变量的生命周期基于实例的生命周期,但其scopes(通过名称访问变量是合法的程序文本区域)是本地的。像某些语言一样,也有“静态”本地人会很好。

遗憾的是,这不是 C# 的特性,我们也没有添加它的计划。拥有固然美好,但拥有美好并不足以证明费用合理,也不足以推迟或取消“拥有更好”的功能。

这只是“很高兴拥有”,因为当然,如果您有私有(private)字段,它已经是该类的私有(private)实现细节。如果您不想在属性外使用它,那么不要编写在属性外使用它的代码。如果您的一位同事试图这样做,请在代码审查中严厉打击他们。

我想我可以补充:在编写改变状态的属性 getter 时要非常小心。默认情况下,属性 getter 是在调试器中查看对象时评估的,它可以非常混淆调试某些东西并让调试器改变字段的值只是因为您正在检查一个对象

关于c# - 私有(private)范围变量仅在属性内使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9192443/

相关文章:

javascript - 这是将属性分配给对象的有效方法吗?

c# - 使用 Exchange Web 服务从 Exchange 下载附件

c# - 我可以使用流在 SQL Server (C#) 中插入或更新行吗?

c# - 按 Entity Framework 中的子表排序

c# - 在 Windows 窗体 C# 应用程序的配置文件中设置值

JavaFX SimpleObjectProperty<T> 与 SimpleTProperty

inheritance - 你如何访问 Typescript 中基类的属性?

java - 如何在Java中高效存储滚动播放项属性?

ios - 如何在计算属性上设置值

c# - 从类型中获取类定义