c#中有"零和"变量这样的东西吗?

Su *_*lyn 1 c#

我想在c#中创建一个具有配对值的结构,其中如果设置了一个值,则另一个值会自动相反地设置.例如,如果我有一个像:

{
  public bool Courageous;
  public bool Cowardly;
}
Run Code Online (Sandbox Code Playgroud)

因此,如果两个中的一个被设置,另一个被"取消设置".有没有相关的零和变量?

Del*_*ics 5

不要直接公开属性,而是使用属性访问器根据需要改变私有字段:

{
    private bool _courageous;
    private bool _cowardly;

    public bool Courageous
    {
        get { return _courageous; }
        set
        {
            _courageous = value;
            _cowardly = !value;
        }
    }

    public bool Cowardly
    {
        get { return _cowardly; }
        set
        {
            _cowardly = value;
            _courageous = !value;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

或者,在这种情况下更简单,因为你只有两个bools,它们总是另一个的逻辑反转:

{
    public bool Courageous{ get; set; }
    public bool Cowardly { get { return !Courageous; } set { Courageous = !value; } }
}
Run Code Online (Sandbox Code Playgroud)

您的具体情况将决定您是否可以使用公共支持字段并在一个(或其他)属性的公开属性中执行变异,或者需要具有单独的支持字段和更复杂的访问者.

但一般来说,属性和属性访问器可用于制造您需要的几乎任何此类行为.

  • 在你的第二个例子中让'勇敢'成为一个属性.那是'公共布尔勇敢的{得到; 设置;}` (3认同)