我想使這種方法成爲RegisterCollection,目的是在DomainObject中註冊一個子對象集合。我的想法是,我想在列表中註冊集合,以便當我在我的DomainObject上調用Save()時,它將調用保存在每個已註冊集合的子域對象上。需要使用通用集合列表來保存域對象中的集合
我製作了這段代碼,但是當我構建時出現這個錯誤:參數類型'OrderCollection'不能分配給參數類型Collection。
我使用C#與.NET 3.5。我已經閱讀過.NET 4.0中支持的轉換類型失敗的地方。不知道這是正確的理解,但無論如何,我希望有人有一些建議,還有什麼要做或有一個解決方法。
這可能可能與某種CommandPattern?
public interface IDomainObject
{
void Save();
}
public class DomainObject : IDomainObject
{
private readonly IList<Collection<IDomainObject>> m_Collections = new List<Collection<IDomainObject>>();
protected void RegisterCollection(Collection<IDomainObject> collection)
{
m_Collections.Add(collection);
}
/// <summary>
/// Saves this instance collections.
/// </summary>
public virtual void Save()
{
SaveCollections();
}
private void SaveCollections()
{
foreach (var itemCollection in m_Collections)
{
foreach (var item in itemCollection)
{
item.Save();
}
}
}
}
public class OrderCollection : Collection<IOrder>
{
}
public interface IOrder : IDomainObject
{
}
public class Customer : DomainObject
{
private readonly OrderCollection m_OrderCollection = new OrderCollection();
public Customer()
{
// Throws: Argument type 'OrderCollection' is not assignable to parameter type Collection<IDomainObject>
RegisterCollection(m_OrderCollection);
}
}
上面進行了編輯以反映更好的解決方案。希望它可以對其他人有用。 – 2011-04-22 09:29:03