簡體   English   中英

C#私有變量的設置值

[英]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關鍵字的重點。 如果您想避免將其設為公開,則可以考慮使用protectedinternal關鍵字。

或者,正如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.

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