是否有办法为getter和setter设置默认函数?



我想知道是否有一种方法可以为getter或setter设置默认函数。例如,假设我有这样的内容:

public class MyClass
{
    public bool IsDirty {get; private set; } = false;
    private string _property;
    public string Property1 
    { 
        get 
        { 
            return _property1;
        } 
        set
        {
            if (value != _property1)
            {
                _property1 = value;
                IsDirty = true;
            }
        } 
    }
}

我想知道是否有一种方法可以这样做:

public class MyClass
{
    public bool IsDirty {get; private set;} = false;
    MyClass.defaultSet = { if (value != !_property1) { _property1 = value; IsDirty = true; } };
    private string _property1;
    public string Property1 { get; set; }
    public string Property2 {get; set;}
    public string Property3 {get; set;}
   //...
}        

这样我就不用用第一种方法了在这个大的类中我有(~100个属性)

您可以使用像这样的辅助方法来减少噪声

private void Set<T>(ref T field, T value)
{
  if (!Equals(value, field))
  {
    field = value;
    IsDirty = true;
  }
}

那么你可以写:

public string Property1
{
  get => _property1;
  set => Set(ref _property1, value);
}

不,这是不存在的,原因如下:

  1. 不是每个属性都是字符串,所以这需要正确处理整数,日期时间,小数等
  2. 原始值类型已经够糟糕的了,但然后开始抛出像元组这样的东西,复杂的类(其中改变类成员仍然是对属性本身的get操作!),委托等
  3. 如果你引用属性自己的名字,你正在创建一个循环引用,将导致StackOverflowException。
  4. 不是每个属性都将使用相同的Property名称,因此方法的这一部分是不同的。您需要另一个关键字或参数来设置方法。
  5. 你需要一种方法来免除someBool/IsDirty属性。

相关内容

  • 没有找到相关文章

最新更新