簡體   English   中英

在C#中是否可以使用相同名稱的公共getter和私有setter?

[英]Is a public getter and a private setter with same name possible in C#?

如何為財產創建公共獲取者和私有設定者? 以下正確嗎?

public String Password
{
    set { this._password = value; }
}

private String Password
{
    get { return this._password; }
}

是的,即使具有自動屬性,也是可能的。 我經常使用:

public int MyProperty { get; private set; }

是的,從C#2.0開始,您可以為屬性的getter和setter指定不同的訪問級別。

但是語法有誤:您應該將它們聲明為同一屬性的一部分。 只需用private標記要限制的那個即可。 例如:

public String Password
{
    private get { return this._password; }
    set { this._password = value; }
}
public String Password
{
    private set { this._password = value; }
    get { return this._password; }
}

或者您可以使用自動實現的屬性:

public String Password { get; private set; }
public String Password
{
    private set { this._password = value; }
    get { return this._password; }
}

MSDN:

get和set方法通常與其他方法沒有什么不同。 它們可以執行任何程序邏輯,引發異常,被覆蓋並使用編程語言允許的任何修飾符進行聲明。

編輯:MSDN報價只是為了闡明為什么geter和setter可以具有不同的訪問mdofiers,@ Cody Gray提出的好處是:

是的,屬性可以執行程序邏輯並引發異常。 但是他們不應該。 屬性是一種非常輕量級的方法,可與訪問字段進行比較。 程序員應該期望能夠像使用字段一樣使用它們而不會引起任何明顯的性能影響。 因此,強烈建議不要過多使用繁瑣的程序邏輯。 盡管setter可以在必要時拋出異常,但getter幾乎絕不應拋出異常

public string Password { get; private set; }

要獲得“挖掘機”徽章並及時回答問題,請使用get-only屬性封裝的只讀字段

private readonly int myVal;
public int MyVal get { return myVal; }

可能現在(從C#6.0開始)縮短為

public int MyVal { get; }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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