[英]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.