[英]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.