C# 实例访问其他实例的属性值

C# 实例访问其他实例的属性值,c#,properties,instance,C#,Properties,Instance,我的目的是从用户界面获取数据并将其保存为配置。该程序允许配置多人,所以我试图保存每个人的设置。我意识到了一些事情。每当我更改一个实例中的数据时,其他实例的值都会更改 public class Person() { private string _name; public string Name { get { return _name; } set { _name = value; } } public void Cha

我的目的是从用户界面获取数据并将其保存为配置。该程序允许配置多人,所以我试图保存每个人的设置。我意识到了一些事情。每当我更改一个实例中的数据时,其他实例的值都会更改

public class Person()
{
    private string _name;

    public string Name
    {
        get { return _name; }
        set { _name = value; }
    }

    public void Change()
    {
        Name = "F";
    }
}
这是我的个人课

这是我的主要任务

static void Main(string[] args)
{
    Person person = new Person();
    Person person2 = new Person();
    Person current = new Person();

    person.Name = "John";
    person2.Name = "Doe";
    current.Name = "Robert";

    person = current;
    person2 = current;
    current.Change()
}
在current.Change()之后,人员1和人员2的名称将更改为“F”。这种行为让我感到困惑,因为我会期待这个结果

    person = current;
    person2 = current;
    current.Change()
    person = current;
    person2 = current;
我想要的是在接口上使用电流。获取数据并将其保存到person实例。问题是,当我更改“当前”时,所有其他实例属性都会更改为相同,并且我会丢失配置设置

我怎样才能达到我的目的?有什么想法吗


非常感谢你!很抱歉英语不好。

因为
Person
是一种参考类型,当您使用
person2=current时
实际上,您只是将
person2
引用指向内存中的
当前
对象,该对象也由
person
指向

因此,通过一个引用所做的任何更改都将改变内存中相同的物理对象,就像通过另一个引用所做的任何更改一样

您需要做的是制作对象的实际副本

做这件事的一个常见方法是写一封信来复印。您还可以编写一个
Copy()
方法,该方法使用复制构造函数来实现,但除非您有继承层次结构,否则这并不是必需的

下面是您的
Person
类使用复制构造函数和
copy()
方法时的外观:

public class Person
{
    private string _name;

    public Person() // Default constructor is required if there are any other constructors!
    {
        Name = "";
    }

    public Person(Person other) // Copy constructor.
    {
        this.Name = other.Name;
    }

    public Person Copy()
    {
        return new Person(this); // Use copy constructor to return a copy of this.
    }

    public string Name
    {
        get { return _name; }
        set { _name = value; }
    }

    public void Change()
    {
        Name = "F";
    }
}
然后,对于您的示例,您将按如下方式使用:

static void Main()
{
    Person person  = new Person();
    Person person2 = new Person();
    Person current = new Person();

    person.Name  = "John";
    person2.Name = "Doe";
    current.Name = "Robert";

    person  = new Person(current); // Using Copy Constructor.
    person2 = current.Copy();      // Using Copy() method.
    current.Change();  // Only changes current, not person or person2.
}
注意:我建议您不要实现
Copy()
方法,而只使用Copy构造函数,除非(如前所述)您的类有继承层次结构。那太好了