-1

我的人班:

 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;

    }



}

主要的:

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

    }
}

假设我想更改此人的名字和年龄,我该怎么做?FirstName 和 Age 属性是私下设置的。

4

5 回答 5

3

您可以将属性公开-

class Person
{
    // changed private set; to set;
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int Age { get; set; }
}
于 2013-05-02T22:17:40.953 回答
1

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

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

于 2013-05-02T22:24:44.947 回答
1
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设置为 publicsetget

于 2013-05-02T22:18:25.613 回答
1

该类已设置为不可变,这意味着一旦构造了此类的实例,它的属性就无法修改。如果您希望能够构建此类并且他们修改它的属性,您需要使类设置属性为公共,如下所示:

class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int Age { get; set; }
}
于 2013-05-02T22:19:23.163 回答
1

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

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

class Person
{
    public void SetFirstName(string value)
    {
       this.FirstName = value;
    }
}
于 2013-05-02T22:19:51.113 回答