[英]c# inheriting from generic class
讓我先描述邏輯,然后再描述類結構。 有對象,所有對象都必須繼承自ConfigurationObjectBase。 每個對象必須由Manager擁有,並且所有Manager必須派生自ConfigurationObjectManagerBase。 創建對象的新實例時,構造函數之一必須接受Manager的實例,並且Manager的實例必須將該對象的實例添加到其名為ChildObjects的屬性中。 以下是課程示例。 您能否根據業務規則,在下面的代碼中幫助更正? 謝謝。
public class ConfigurationObjectBase<ObjectType>
{
public ConfigurationObjectBase(ConfigurationObjectManagerBase<ObjectType> ownerManager)
{
ownerManager.ChildObjects.Add(this);
}
}
public class ConfigurationObjectManagerBase<ObjectType>
{
public ConfigurationObjectManagerBase()
{
ChildObjects = new List<ObjectType>();
}
public List<ObjectType> ChildObjects { get; set; }
}
public class Catalog : ConfigurationObjectBase<Catalog>
{
public Catalog(CatalogManager ownerManager) : base(???)
{
}
}
public class CatalogManager : ConfigurationObjectManagerBase<CatalogManager>
{
public CatalogManager() : base()
{
}
}
您的代碼中有兩個問題:
CatalogManager
應該繼承自ConfigurationObjectManagerBase<Catalog>
,而不繼承自ConfigurationObjectManagerBase<CatalogManager>
ChildObjects
可能應該是ConfigurationObjectBase<ObjectType>
的列表,而不是ObjectType
的列表(否則,您不能向其添加ConfigurationObjectBase<ObjectType>
) 因此,代碼可能看起來像這樣:
public class ConfigurationObjectBase<ObjectType>
{
public ConfigurationObjectBase(ConfigurationObjectManagerBase<ObjectType> ownerManager)
{
ownerManager.ChildObjects.Add(this);
}
}
public class ConfigurationObjectManagerBase<ObjectType>
{
public ConfigurationObjectManagerBase()
{
ChildObjects = new List<ConfigurationObjectBase<ObjectType>>();
}
public List<ConfigurationObjectBase<ObjectType>> ChildObjects { get; set; }
}
public class Catalog : ConfigurationObjectBase<Catalog>
{
public Catalog(CatalogManager ownerManager) : base(ownerManager)
{
}
}
public class CatalogManager : ConfigurationObjectManagerBase<Catalog>
{
public CatalogManager()
{
}
}
另外,您不需要調用默認的基類構造函數( base()
),它是由編譯器隱式完成的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.