如果我想在一個私有類中設置我的屬性,所以它應該只能在這個類中使用和設置這個屬性,有什麼更好的方法?這財產:私人方法或私人獲取/設置?
public string Name { private get; private set }
或
private string Name { get; set }
嗯並且還有
private string Name { private get; private set }
如果我想在一個私有類中設置我的屬性,所以它應該只能在這個類中使用和設置這個屬性,有什麼更好的方法?這財產:私人方法或私人獲取/設置?
public string Name { private get; private set }
或
private string Name { get; set }
嗯並且還有
private string Name { private get; private set }
你試過編譯你的例子嗎?只有中間的一個會翻譯。
如果要指定額外的輔助功能級關鍵字,則只能在其中一個訪問器(getter/setter)上執行此操作,並且該訪問器的該級別必須比整個屬性的可訪問性更具限制性。
在這裏,你看到的規則:Restricting Accessor Accessibility
是的,你是對的。不知何故,我不能編譯,如果使用私人獲得;私人設置只有當我使用私人獲得或設置 – silla
@silla這是因爲你設置屬性與一個訪問修飾符,同時設置所有可能的訪問器與另一個。使用get和set private將其設置爲公共部分否定公共部分,所以它不會編譯。如果你把它設置爲私有,獲取和設置是自動私有的,因此沒有必要將它們設置.... –
更好的方法取決於你想要什麼:
public string Name { private get; private set }
該物業是public
但沒有人可以閱讀或寫信給它,除了課堂本身。那完全沒用,所以只用 private string Name { get; set }
。
一般來說,如果你查看像情侶的方法(這實際上是)該財產
private string get_Name() { }
private string set_Name(value) { }
具有以應用標識符屬性get/set
變得明顯,我希望有可能的原因。
public string Name { get; private set; }
這是我認爲你想要做的。
除非你只想讓你的班級看到它,否則在財產公開的時候試圖讓私人獲得私密是沒有意義的。在這種情況下,你應該使用:
private string Name { get; set; }
更新:在二讀,你一定要在第二個例子。
值得一提的是原本,C#不會讓你設置一個getter或setter不同的接入,所以唯一可能的選擇是:
public string Name { get; set; }
protected internal string Name { get; set; }
internal string Name { get; set; }
protected string Name { get; set; }
private string Name { get; set; }
(就此而言,你不能擁有自動屬性,並且總是必須自己寫一個支持字段,但是我們會忽略它,僅僅因爲我們會用這種方式來縮短範例)。
這是有不同的接入兩個,最常見的是更嚴格的setter比吸氣經常有用的。因此,
public string Name { get; private set; }
喜歡被引入。現在
,通過該擴展,這似乎合乎邏輯,足以讓:
public string Name { private get; private set; }
private string Name { private get; private set; }
然而,這兩個是表達?
第二個是不是太糟糕了,這只是無謂地重複。儘管如此,很可能一些混淆的想法讓我們在那裏(很可能是不完整的重構)。好的代碼和表達你在做計算機做什麼(如果有的話,更是如此)所做的一樣,更好地表達清楚。
因此,如果你最終得到{ private get; private set; }
這樣的結果,那麼它很可能是值得再次考慮並思考你真正想在這裏說些什麼的。華友世紀因爲它是一個編譯器錯誤。
釷第一種情況更是雪上加霜。它說:「這個屬性是公開的,除了私有的setter和私有的getter。」這不是一個例外,「這是一件事,除了所有的時間」都不是真正的表達。雙倍支持編譯器不讓我們這樣做。
只要是迂腐:如果不指定一個getter或setter不同的訪問權限,有五分之一的可能性:'保護內部字符串名稱{get;組; }' –
@JeppeStigNielsen是的。我認爲'受到保護的內部'的一半概念並不在C#1.0中,後來纔出現,但是快速搜索似乎表明它始終存在。 –
'內部'現在意外''私人'。 –
如果你真的想你的要求,那麼你並不需要的屬性,你應該使用private
場。
對於私有成員,你並不需要定義存取。 只是這樣做:
private string _name;
你要設置的屬性類的私有變量? –
@KundanSinghChouhan是的,我是這麼認爲的......不知道我得到它,你想^^ – silla
@Sila我已經加了我的答案。看一看。 –