我想创建引用相同引用的t对象,但我想在第二个中更改属性而不要为第一个更改
student s=new student(10);
.........
student s2=new student(10);
s2.class="class2"
问题是我怎么知道我什么时候创建我之前创建过实例的seond学生,如果我之前创建了一个实例,我将创建新的深层副本以避免它
我的建议将是
{
student s=new student(10);
.........
if(we create any insatnce before from student)
student s2=cloneStudentMethod(10);
s2.class="class2"
}
和cloneStudentMethod(10)
创建一个深层复制对象
问题是我如何创建条件???
我希望我的问题很清楚
答案 0 :(得分:2)
一种方法是写一个跟踪它的学生工厂:
public class StudentFactory
{
private HashSet<int> _CreatedIds = new HashSet<int>();
public Student Create(int id)
{
_CreatedIds.Add(id);
return new Student(id);
}
public bool HasCreatedStudentBefore(int id)
{
return _CreatedIds.Contains(id);
}
}
更新:您可以将学生存储在那里并返回学生对象的副本(如果已经在那里),而不是仅将ID放入哈希集中。
答案 1 :(得分:0)
您可以实现某种克隆方法,并执行以下操作:
if (s != null)
{
student s2 = new Student();
s2.Clone(s);
}
这样您就可以传递要克隆的对象,而不仅仅是单个属性(在您的示例中为10)。
我觉得我不太明白你的问题。