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

时间:2016-08-09 18:50:57

标签: 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;
         }
      }
   }
}

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

4 个答案:

答案 0 :(得分:14)

您需要为您的财产使用支持字段。您收到了SO错误,因为您在其自己的getter中递归引用了MyProp属性,导致无限递归。

private short? _myProp;

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

答案 1 :(得分:4)

你得到了异常,因为你实际上是在你的属性中进行无限递归。

不幸的是,您所描述的内容在C#中是不可能的,您需要自己定义支持字段。

答案 2 :(得分:4)

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

答案 3 :(得分:2)

你做不到。您要么使用自定义的getter setter(两者都不是单一的),要么坚持使用自动getter。

在你的属性的代码中,getter试图访问自己的getter(它将访问相同的getter等等)

所以这是一个无休止的循环,它将摧毁整个世界并带来人性的终结