我有以下类别:泛型类属性的
BaseField:
public abstract class BaseField {
...
public BaseField()
{
}
public BaseField(E_FieldType fieldType)
{
_FieldType = fieldType;
}
}
文本字段:
public class TextField : BaseField {
...
public TextField() : base(E_FieldType.Text)
{
}
}
的DateField:
public class DateField : BaseField {
...
public DateField() : base(E_FieldType.Date)
{
}
}
而且数据块类应包含文本字段或的DateField:
public class DataBlock<T> : BaseBlock where T : BaseField, new() {
...
private T _Field;
public DataBlock(string name): base(name, E_BlockType.Data)
{
_Field = new T();
}
}
以下行正常工作:
DataBlock<TextField> db = new DataBlock<TextField>("qwe");
但是这是不可能写出这样的代码:
public ObservableCollection<DataBlock<BaseField>> DataBlockList { get; set; }
public DataBlockViewModel()
{
DataBlockList = new ObservableCollection<DataBlock<BaseField>>();
DataBlockList.Add(new DataBlock<TextField>("qwe"));
DataBlockList.Add(new DataBlock<DateField>("asd"));
}
的错误是:
'BaseField' must be a non-abstract type with a public parameterless constructor in order to use it as parameter 'T' in the generic type or method
'DataBlock<T>'
请您告知如何解决,我可以创造ObservableCollection<DataBlock<BaseField>>
收集的问题?
我才能把public class DataBlock<T> : BaseBlock where T : BaseField
new()
和
public DataBlock(string name): base(name, E_BlockType.Data)
{
//_Field = new T();
}
在这种情况下,我可以创造DataBlockList = new ObservableCollection<DataBlock<BaseField>>();
,但它是不可能写:
DataBlockList.Add(new DataBlock<TextField>("qwe"));
DataBlockList.Add(new DataBlock<DateField>("asd"));
考虑澄清为什么使用'无公共无参数构造函数'制作'BaseField'非抽象类型'不是一个选项。 –