c#设置私有变量的值

时间:2013-09-10 16:43:51

标签: c# private getter-setter

我正在使用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;
    }

但如果我将我的set变量更改为private?

,如何设置变量
    private int _Age;
    public int Age
    {
       get {return _Age;  }
       private  set  {  _Age= value;   }
    } 

3 个答案:

答案 0 :(得分:7)

如果将set方法更改为private,则无法在类外设置该属性的值;这是private关键字的重点。如果您想避免将其公开,我会考虑使用protectedinternal个关键字。

或者,正如JNYRanger所说,你可以从构造函数中调用这个setter,这样你就可以在当前类的“外部”有效地设置该值。

示例:

public class Person 
{    
    public int Age { get; private set; }

    public Person (int age) 
    {
        Age = age;
    }
}

答案 1 :(得分:3)

我无法对你的老板进行反向工程,以了解他为什么建议你不要使用公共制定者。但是,如果我不得不猜测,我会说他鼓励你让你的课程一成不变。

不变性意味着您无法在创建类之后更改类的状态(即没有公共setter或更改内部状态的方法)。它有各种优点(例如,您可以读取What's the advantage of a String being Immutable?)。

那么如果你没有制定者,你如何在创建它之后改变Person的年龄?你不能。您创建了一个具有所需年龄的新Person,并“抛弃”另一个Person

供参考,您可以阅读How to: Implement a Lightweight Class with Auto-Implemented Properties

现在,举个例子:

//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");
    }

答案 2 :(得分:2)

你在找这个:

public int Age { get; private set; }

易于管理,您不必使用_Age。 在您的情况下,不需要_Age