更改类别私有财产

本文关键字:私有财产 | 更新日期: 2023-09-27 18:11:49

我的个人类别:

 class Person
{
    public string FirstName { get; private set; }
    public string LastName { get; private set; }
    public int Age { get; private set; }
    public Person(string firstName,string LastName,int age)
    {
        this.FirstName = firstName;
        this.LastName = LastName;
        this.Age = age;

    }
    public override string ToString()
    {
        return this.FirstName + " " + this.LastName + " " + this.Age;
    }

}

Main:

 class Program
{
    static void Main(string[] args)
    {
        Person sallyPerson = new Person("Sally", "Solomon",23);
    }
}

比方说,我想更改这个人的名字和年龄,我该怎么做?FirstName和Age属性是私人设置的。

更改类别私有财产

您可以将属性公开-

class Person
{
    // changed private set; to set;
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int Age { get; set; }
}

所以我刚刚意识到,所有的答案都假设你问的问题是,而不仅仅是一个例子。但是,也许您只是将其作为一个示例,并且您实际上需要设置一个对象的私有属性,而您不控制该对象的源?在这种情况下,我想说,这通常是一个坏主意,但如果你真的需要这样做,有一种方法。这种方式被称为"反射"(如果你真的想的话,这只是你可以用反射做的许多粗略的事情之一(。这是一个你可能想看看的问题,如果这真的是你想要的。

不过,更可能的是,如果您控制了该类的源,并且想要更改它们,那么正确的响应就是不让属性是私有的。

class Program
{
    static void Main(string[] args)
    {
        Person sallyPerson = new Person("Sally", "Solomon",23);
sallyPerson = new Person("Newname", "Newvalue", 23);
    }
}

这是一种方法,另一种方法是在Person对象中添加方法:

public void UpdateFirstName(string newName)
{
this.FirstName = newName;
}

并进行sallyPerson.UpdateFirstName("newName");

或者使属性public具有公共setget

该类已设置为不可变,这意味着一旦构造了该类的实例,就不能修改其属性。如果你想构造这个类并修改它的属性,你需要让类设置属性为公共的,比如:

class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int Age { get; set; }
}

我希望这是一个家庭作业问题,否则@Brandon Cuff的答案是显而易见的。

或者,您可以公开方法来设置字段:

class Person
{
    public void SetFirstName(string value)
    {
       this.FirstName = value;
    }
}