簡體   English   中英

c#靜態類屬性

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM