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构造函数,除非(如前所述)您的类有继承层次结构。那太好了