gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 14:15:49 25 4
gpt4 key购买 nike

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

我经常像这样创建“ 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com