对象引用问题

时间:2011-03-30 19:56:56

标签: c# oop

我想创建引用相同引用的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)创建一个深层复制对象

问题是我如何创建条件???

我希望我的问题很清楚

2 个答案:

答案 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)。

我觉得我不太明白你的问题。