私有变量的 C# 设置值

本文关键字:设置 变量 | 更新日期: 2023-09-27 18:30:53

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

私有变量的 C# 设置值

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

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

例:

public class Person 
{    
    public int Age { get; private set; }
    public Person (int age) 
    {
        Age = age;
    }
}

我无法对你的老板进行逆向工程来理解他为什么建议你不要使用公共二传手。不过,如果我不得不猜测,我会说他鼓励你让你的类不可变。

不可变性意味着在创建类后无法更改类的状态(即没有公共资源库或更改内部状态的方法)。它具有各种优点(例如,您可以阅读字符串不可变的优势是什么?

那么,如果您没有二传手,如何在创建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