我設置一個類的屬性一樣,屬性設置爲私人或無私人關鍵字。有什麼不同?
public string Name { get; set; }
但我也可以設置這樣的
public string Name { get; private set; }
我想知道它們之間的區別的財產?和他們有什麼範圍?
我設置一個類的屬性一樣,屬性設置爲私人或無私人關鍵字。有什麼不同?
public string Name { get; set; }
但我也可以設置這樣的
public string Name { get; private set; }
我想知道它們之間的區別的財產?和他們有什麼範圍?
案例public string Name { get; private set; }
使用私人設置意味着該屬性是從外部ReadOnly
。當你有一個只讀屬性並且不想顯式地聲明支持變量時它很有用。
public string Name { get; private set; }
是一樣的:
private string _Name;
public string Name
{
get { return _Name; }
private set { _Name = value; }
}
這意味着您不能從類實例中設置此屬性。只有同一班的同學才能設置它。因此,對於外人來說,這個屬性變成read-only
屬性。
class Foo
{
public string Name1 { get; set; }
public string Name2 { get; private set; }
public string Name3 { get { return Name2; } set { Name2 = value; }
}
然後
Foo f = new Foo();
f.Name1 = ""; // No Error
f.Name2 = ""; // Error.
f.Name3 = ""; // No Error
Name3
將設定值Name2
但Name2
設定值直接是不可能的。
他們有什麼範圍?
由於Name1
和Name3
財產是公開的,使他們和他們的get和set方法是隨處可見。
Name3
也是公開的,但其集合是私人的,所以屬性和獲取方法將隨處可用。設置方法範圍僅限於類(private
訪問修飾符在定義它的實體內部具有作用域)。
感謝您澄清這一點很好。 –
第一個將有可用的出你的類Set
和Get
方法。第二個方法將有一個Get
方法可用於您的班級,但Set
方法將只在您的班級內提供。這通常表示只讀行爲。
後兩種情況實際上並不相同。在課堂上,'this.Name =「bill」'對於第一個實現是有效的,而不是*第二個。 – kdbanman
@kdbanman,絕對正確。感謝您指出。 – Habib