2013-04-24 78 views
2

我有這樣的代碼:訪問者爲什麼必須比屬性限制更多?

public string foo { get; set; } 

現在,我解釋這是我的對象有一個名爲foo的公共屬性,都它的訪問是公開的。如果我這樣寫:

private string foo { get; set; } 

我解釋說我的對象有一個名爲foo私人財產,都它的訪問者的是私有的。我明白將財產本身保密。我不明白的是爲什麼訪問者必須更具限制性?如果我寫:

private string foo { public get; public set; } 

我解釋,我的對象有一個名爲foo私人財產,雙方是它的訪問是公開的,這是我想要的行爲。我希望擁有公共訪問者的私人財產。我的意思是,如果我必須寫一個Get/Set方法,我會的。但我只是困惑,爲什麼這是。

+0

怎麼樣,去年財產是私有?或者整個事情都是私密的,而且getter/setter實際上是私人的,即使你正在對他們的公共訪問者進行拍打,或者它是公開的,並且'private'標識符不正確... – Servy 2013-04-24 20:32:26

+1

我認爲這只是一個有用的慣例。爲了代碼一致性,關於訪問級別的順序應該遵循* some *規則(在類定義中,'static'應該出現在'partial'之前的規則應遵循相同的方式),並且它使得意識到規則應該是「屬性訪問級別必須限制最少」,因爲眼睛首先傾向於關鍵字,這是最安全的選擇。 – 2013-04-24 20:36:08

+2

我向SO道歉。這個問題是由於我對非常非常基本的東西的無知:[字段和屬性之間的區別](http://stackoverflow.com/questions/295104/what-is-the-difference-between-a-field -and-A-屬性功能於c)中。現在我已經看到了這一點,現在更清晰了。 – MyCodeSucks 2013-04-24 20:42:22

回答

3

的屬性實際上是(水下)不外乎兩種方式:

public string foo { get; set; } 

將轉化爲:

public string get_foo() { ... } 
public void set_foo(string value) { ... } 

這些方法只能有一個訪問修飾符,而不是兩個的組合。

如果我記得正確,C#v1不支持getter和setter的訪問修飾符。有兩個函數使用了一個訪問修改器。

在v2中,可以「覆蓋」getter/setter對之一,這樣就可以覆蓋「other」函數。沒有必要重寫這兩個getter/setter,因爲在那裏會導致property-access修飾符無用。

爲什麼getter/setter的訪問修飾符更具限制性,在我看來,這與更容易實現總是具有(隱式公共)屬性的接口有關。

欲瞭解更多信息,請閱讀:http://msdn.microsoft.com/en-us/library/75e8y5dd(v=vs.80).aspx

0

爲什麼需要這樣的屬性

private string foo { public get; public set; } 

如果你想擁有你得到公共設置,然後進行財產公開。

編譯器將首先檢查屬性的訪問權限,然後檢查其方法。如果屬性是公共的,然後它的方法可以有公共或私人或任何訪問

相關問題