[英]c# setting value of private variable
我正在使用getter / setter屬性來獲取或設置變量,如果我在創建類數組時使用公共變量來設置值,則代碼運行良好,但是我只是想知道如何設置私有變量的值。 我的代碼是
public class Person
{
//getter and setter for each variable
private string _Name;
public string Name
{
get { return _Name;}
set { _Name= value; }
}
private int _Age;
public int Age
{
get {return _Age; }
set { _Age= value; }
}
.... // other properties
// Another Class
public void setValues (Person[] p,int i)
{ p[i].Age= 30;
}
但是,如果我將設置變量更改為private,如何設置變量?
private int _Age;
public int Age
{
get {return _Age; }
private set { _Age= value; }
}
如果將set方法更改為private,則將無法在類外部設置該屬性的值。 這就是private
關鍵字的重點。 如果您想避免將其設為公開,則可以考慮使用protected
或internal
關鍵字。
或者,正如JNYRanger所說,您可以從構造函數中調用此setter,該構造函數將使您可以在當前類的“外部”有效地設置該值。
例:
public class Person
{
public int Age { get; private set; }
public Person (int age)
{
Age = age;
}
}
我無法對您的老板進行反向工程,以了解他為什么建議您不要使用公開場合。 但是,如果我不得不猜測的話,我會說他鼓勵您使您的課堂保持不變。
不變性意味着您不能在創建類后更改其狀態(即,沒有公共設置器或更改內部狀態的方法)。 它具有各種優點(例如,您可以閱讀String不可變的優點是什么? )。
那么,如果沒有設置者,如何在創建Person
之后改變其年齡? 你不能 您創建具有所需年齡的新Person
,然后“扔掉”另一個Person
。
作為參考,您可以閱讀如何:實現具有自動實現屬性的輕量級類。
現在,以您的示例為例:
//immutable Person
public class Person
{
public string Name {get; private set;}
public int Age {get; private set;}
public Person(int Age, string Name)
{
this.Age=Age;
this.Name=Name;
}
}
你將會擁有
// Another Class
public void setValues (Person[] p,int i)
{
// p[i].Age= 30; // no
p[i]=new Person(p[i], "new name");
}
您在尋找這個嗎?
public int Age { get; private set; }
它易於管理,您不必使用_Age
。 在您的情況下, _Age
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.