我有一个带有属性的对象,我想为其创建一个自定义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?
答案 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),同时定义getter
和setter
,在这种情况下,您必须提供支持字段,因为编译器不会为您创建一个。
答案 3 :(得分:2)
你做不到。您要么使用自定义的getter setter(两者都不是单一的),要么坚持使用自动getter。
在你的属性的代码中,getter试图访问自己的getter(它将访问相同的getter等等)
所以这是一个无休止的循环,它将摧毁整个世界并带来人性的终结