[英]c# Static Class Property
我今天已经向我展示了一个例子,并且只想检查以下两者是否实际上具有相同的效果,而不是,它们之间的区别是什么。
这是:
private static Service1Client _myFoo;
static ServiceLayer()
{
MyFoo = new Service1Client();
}
public static Service1Client MyFoo
{
get { return _myFoo; }
set { _myFoo = value; }
}
这是一个冗长的方式:
public static Service1Client _myFoo
{
get { return _myFoo; }
set { _myFoo = value; }
}
static ServiceLayer()
{
_myFoo = new Service1Client();
}
如果不是这样,那么它们之间有什么区别?
谢谢。
您需要支持字段,因为:
public static Service1Client _myFoo
{
get { return _myFoo; }
}
....就像你在你的例子中将永远循环。
但是,C#确实提供了自动属性。 你可以用这个简单的代码完成同样的事情:
public static Service1Client MyFoo { get; set; }
static ServiceLayer()
{
MyFoo = new Service1Client();
}
几乎,但没有。 在您的公共财产中,您无法返回您正在获取和设置的对象。 你需要一个支持领域。
private static Service1Client _myFoo
public static Service1Client MyFoo
{
get { return _myFoo; }
set { _myFoo = value; }
}
在这种情况下,由于您只进行基本的get和set,因此可以使用auto属性。 这相当于上面的代码。
public static Service1Client MyFoo { get; set; }
鉴于此代码:
public static Service1Client _myFoo
{
get { return _myFoo; }
set { _myFoo = value; }
}
StackOverflowExcpetion
使用getter或setter时都会得到一个StackOverflowExcpetion
,因为setter会调用自身,它会调用自身等等(直到你的堆栈空间用完为止)。
成功缩短第一个例子的一种方法是:
public static Service1Client MyFoo {get;set;}
static ServiceLayer()
{
MyFoo = new Service1Client();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.