我有一個類表示一些數據和一個集合類(從CollectionBase派生)。當我將集合類的一個實例分配給另一個實例時,它通過引用進行分配,所以我實現了ICloneable
接口。實現克隆方法
public void Add(object item)
{
InnerList.Add(item);
}
public object Clone()
{
MyCollection clone = new MyCollection();
foreach (MyClass item in this)
{
clone.Add(item);
}
return clone;
}
現在一切工作正常。但是,當我瀏覽元素並將它們逐個添加到克隆實例時,爲什麼不通過引用添加呢? Add
方法如何將它添加到InnerList中?爲什麼不通過參考添加?如果我添加一個這個集合的實例,讓我們說一個List
並更改列表中的元素?原始實例是否會更改?
編輯:這是MyClass
。
public class MyClass
{
public bool IsEnabled { get; set; }
public string Parent { get; set; }
public string Child { get; set; }
public MyClass()
{
IsEnabled = false;
Parent = string.Empty;
Child = string.Empty;
}
public MyClass(bool isEnabled, string parent, string child)
{
IsEnabled = isEnabled;
Parent = parent;
Child = child;
}
public bool IsValid()
{
return (!Parent.Equals(string.Empty) &&
!Child.Equals(string.Empty));
}
public override bool Equals(object obj)
{
if (obj == null)
{
return false;
}
if (!obj.GetType().IsAssignableFrom(this.GetType()))
{
return false;
}
return ((MyClass)obj).Parent.Equals(Parent) ||
((MyClass)obj).Child.Equals(Child);
}
public bool Equals(MyClass myClass)
{
if (myClass == null)
{
return false;
}
return myClass.Parent.Equals(Parent) ||
myClass.Child.Equals(Child);
}
public override int GetHashCode()
{
return Parent.GetHashCode();
}
}
編輯2:我所做的是
MyClass item = new MyClass(true, "test", "test");
MyCollection collection = new MyCollection();
collection.Add(item);
MyCollection newCollection = new MyCollection();
newCollection = (MyCollection) collection.Clone();
newCollection[0].Parent = "changed";
現在在這之後我預計該集合[0] .Parent將改爲「改變」也,但它仍然保持不變。不是通過參考克隆實例添加的嗎?
但是爲什麼集合的引用類型和我創建了自定義類是不? – hattenn
@hattenn - 應該是。你能分享「MyClass」的代碼嗎? –
我已添加到問題中。 – hattenn