1

我正在使用 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 int _Age;
    public int Age
    {
       get {return _Age;  }
       private  set  {  _Age= value;   }
    } 
4

3 回答 3

7

如果您将 set 方法更改为私有,您将无法在类外设置该属性的值;private这就是关键字的全部意义所在。如果你想避免它被公开,我会考虑protectedor关键字。internal

或者,正如 JNYRanger 所说,您可以从构造函数中调用此设置器,这将允许您有效地设置当前类“外部”的值。

例子:

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

    public Person (int age) 
    {
        Age = age;
    }
}
于 2013-09-10T16:48:14.643 回答
3

我无法对您的老板进行逆向工程以了解他为什么建议您不要使用公共设置器。不过,如果我不得不猜测一下,我会说他鼓励你让你的类不可变。

不变性意味着您不能在创建类后更改其状态(即没有公共设置器或更改内部状态的方法)。它有很多优点(例如,您可以阅读String is Immutable 的优点是什么?)。

Person那么,如果您没有 setter,如何在创建 a 后更改它的年龄?你不能。您创建一个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");
    }
于 2013-09-10T17:18:16.480 回答
2

您是否正在寻找这个:

public int Age { get; private set; }

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

于 2013-09-10T16:47:07.240 回答