自定义设置器但自动吸气器

fre*_*hie 18 c#

我有一个带有属性的对象,我想为其创建一个自定义setter并保持自动getter:

public class SomeObject
{
   public int SomeProp { get; set; }
   public Nullable<short> MyProp
   {
      get
      {
         return MyProp;
      }
      set
      {
         if (value != null)
         {
            SomeProp = SomeWork(value);
            MyProp = value;
         }
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

问题是我在getter上遇到Stackoverflow错误.我如何实现一个属性,我保持getter原样,但只修改setter?

ror*_*.ap 16

您需要为您的财产使用支持字段.你得到一个SO错误,因为你MyProp在自己的getter中递归引用你的属性导致无限递归.

private short? _myProp;

public short? MyProp
{
    get
    {
        return _myProp;
    }
    set
    {
        if (value != null)
        {
            SomeProp = SomeWork(value);
            _myProp = value;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 即使使用自动实现的属性,也仍然会自动为您创建一个隐式支持字段。 (2认同)

Rah*_*hul 5

不,不可能。要么使它成为一个完整的auto属性(OR),要么定义gettersetter在这种情况下,您将必须提供后备字段,因为编译器不会为您创建一个后备字段。