改变阶级的私有财产

时间:2013-05-02 22:15:32

标签: c#

我的班级:

 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属性是私有设置的。

5 个答案:

答案 0 :(得分:3)

您可以将属性设为公开 -

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

答案 1 :(得分: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");

或者使用公开publicset

制作属性get

答案 2 :(得分:1)

该类已设置为Immutable,这意味着一旦构造了此类的实例,就无法修改其属性。如果您希望能够构造此类并修改它的属性,则需要将类设置为公共属性,如下所示:

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

答案 3 :(得分:1)

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

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

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

答案 4 :(得分:1)

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

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