gpt4 book ai didi

c# - 强制获取/设置私有(private)属性的私有(private)变量访问权限

转载 作者:太空狗 更新时间:2023-10-29 20:44:55 27 4
gpt4 key购买 nike

如果我有一个私有(private)变量,我想对其进行一些内部验证,并且我想将该验证保留在一个地方,我将它放在一个 getter/setter 后面,并且只能通过该 getter/setter 访问它。这在处理公共(public)属性时很有用,因为其他代码无法访问私有(private)变量,但是当我处理类本身内部的对象时,有没有办法强制执行 getter/setter?

  private int _eyeOrientation;

private int eyeOrientation
{
get
{
return _eyeOrientation;
}
set
{
if (value < 0)
{
_eyeOrientation = 0;
}
else
{
_eyeOrientation = value % 360;
}
}
}

这里的问题是类中的其他函数可能会意外修改

_eyeOrientation = -1;

这会使程序变得困惑。有什么方法可以让它引发编译器错误吗?

最佳答案

听起来您需要一个角度类型。

// Non mutable Angle class with a normalized, integer angle-value
public struct Angle
{
public Angle(int value)
{
Value = value;
}

private angle;
public Value
{
get { return angle; }
private set { angle = Normalize(value); }
}

public static int Normalize(int value)
{
if (value < 0) return 360 - (value % 360);
return value % 360;
}
}

public class SomeClass
{
public Angle EyeOrientation { get; set; }
}

如果您有某种类型的值,例如角度、金钱、重量或其他任何类型,将其设为自己的类型始终是一个很好的实践,即使该值本身存储在 int、decimal 等中。这种类型使您的界面更清晰和类型安全。如果您期望角度或整数值作为某些方法的参数,则情况不同。

关于c# - 强制获取/设置私有(private)属性的私有(private)变量访问权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/850586/

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