我收到错误使用泛型类型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>
答案 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>
可以解决您的问题。