从公共实例属性返回静态属性的值
我刚刚在LINQPad中玩弄了一些代码,并设法使程序崩溃并出现一个*异常。从公共实例属性返回静态属性的值
我基本上在字段中创建了一个静态属性,并使用一个属性来返回实例的值。
我的实例属性的getter会返回静态字段的值,但setter会自己设置。什么时候会使用这种类型的模式,以及如何产生一个*异常?我所做的
代码示例:
void Main()
{
SomeClass myinstance = new SomeClass();
SomeClass.x = "Some Value";
myinstance.y = "Some other value";
myinstance.y.Dump();
}
public class SomeClass
{
public static string x;
public string y
{
get { return x; }
set { y = value; }
}
}
这是我曾经与性能:)做的第一件事 - 你递归调用在y制定者,而不是设置支持字段。由于它自己调用,它最终会叠加。
每个setter都是语法糖,基本上是一个方法调用。你所做的,基本上相当于一个方法,这样做:
public class SomeClass
{
public string GetValue() { return "some string"; }
public void SetValue(string arg)
{
SetValue(arg); // recursively calls itself until *
}
}
你写y = value;
,而不是在二传手x = value;
!
注意,对于简单的属性,你可以使用
public string y { get; set; }
,它会自动生成一个隐藏字段。
谢谢丹维尔。我没有为此使用自动属性,因为我正在测试从非静态属性返回静态字段的值时发生了什么。 :) – 2010-04-18 19:19:17
我看到了,所以我的回答不知何故误导了:) – Danvil 2010-04-18 20:00:45
哦,是的!谢谢马克。什么菜鸟的错误:P – 2010-04-18 19:08:38
容易让人......我敢肯定很多人都这样做:) – 2010-04-18 19:10:02