簡體   English   中英

c#從泛型類繼承

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM