如何从通用对象列表继承

时间:2013-04-09 15:42:45

标签: c# generics inheritance

我收到错误使用泛型类型GetOption<EnumT>需要1个类型参数。错误来自我继承自List<GetOption>

的第一行

我正在尝试建立一个继承结构,我可以在基础对象上执行所有处理,并将具体内容驻留在子对象中。子对象的数量为N个。在实例化时,需要告知基础对象子类型。

最多父类将从List继承,因此我可以在最多父对象中具有列表的功能,用于添加将在实例化时通知其类型的通用子项。

这是我到目前为止所做的:

前两个类是基类

public abstract class GetOptions : List<GetOption>
{
    public enum FilterDirections
    {
        Ascending,
        Descending
    }

    private FilterDirections _filterDirection;

    public FilterDirections FilterDirection
    {
        get { return _filterDirection; }
        set { _filterDirection = value; }
    }

    public GetOptions()
    {
        FilterDirection = FilterDirections.Ascending;
    }
}

public abstract class GetOption<EnumT>
{
    private EnumT _column;

    public EnumT Column
    {
        get { return _column; }
        set { _column = value; }
    }

    public GetOption()
    {

    }
}

最后两个类是样本子类

public class PersonTypeLookupGetOptions : GetOptions
{
    public PersonTypeLookupGetOptions() : base() { }
}

public class PersonTypeLookupGetOption : GetOption<PersonTypeLookup.PersonTypeLookupFields>
{

}

我将如何完成我想要做的事情?

修改

我要做的是定义我在子对象中继承的List中的对象类型。

根据我的第一个问题的评论,我能够找到我需要的解决方案。类定义如下:

public abstract class GetOptions<ChildT, EnumT> : List<ChildT> where ChildT : GetOption<EnumT>

public abstract class GetOption<EnumT>

public class PersonTypeLookupGetOptions : GetOptions<PersonTypeLookupGetOption, PersonTypeLookup.PersonTypeLookupFields>

public class PersonTypeLookupGetOption : GetOption<PersonTypeLookup.PersonTypeLookupFields>

2 个答案:

答案 0 :(得分:2)

目前还不清楚你要做的是什么,但有一件事可以帮助你将泛型参数传播到集合类型:

public abstract class GetOptions<EnumT> : List<GetOption<EnumT>>
  

最多父类将从List继承,因此我可以在最父对象中具有列表的功能,用于添加将在运行时通知其类型的通用子项

请注意,泛型绑定在编译时,而不是在运行时。

答案 1 :(得分:0)

虽然我不知道你的更大问题的解决方案,但我相当肯定你的错误是由于你在编译器期望List<GetOption>时使用List<GetOption<EnumT>>。话虽如此,我真的不明白你在这里会发生什么......

编辑:您似乎更希望GetOption成为没有<EnumT>部分的课程,然后您想继承List<GetOption>。因此,将基类更改为GetOption而不是GetOption<EnumT>可以解决您的问题。