这可能是不可能的,但我有这样一个类:
public class Metadata<DataType> where DataType : struct
{
private DataType mDataType;
}
还有更多的内容,但让我们保持简单。where语句将泛型类型(DataType)限制为值类型。我想要做的是拥有这些不同类型的元数据对象(DataType)的列表。例如:
List<Metadata> metadataObjects;
metadataObjects.Add(new Metadata<int>());
metadataObjects.Add(new Metadata<bool>());
metadataObjects.Add(new Metadata<double>());
这有可能吗?
发布于 2008-12-09 15:31:57
public abstract class Metadata
{
}
// extend abstract Metadata class
public class Metadata<DataType> : Metadata where DataType : struct
{
private DataType mDataType;
}
发布于 2008-12-09 15:41:17
按照leppie的回答,为什么不让MetaData
成为一个接口:
public interface IMetaData { }
public class Metadata<DataType> : IMetaData where DataType : struct
{
private DataType mDataType;
}
发布于 2008-12-09 16:14:39
我还使用了一个非通用版本,使用了new
关键字:
public interface IMetadata
{
Type DataType { get; }
object Data { get; }
}
public interface IMetadata<TData> : IMetadata
{
new TData Data { get; }
}
显式接口实现用于允许两个Data
成员:
public class Metadata<TData> : IMetadata<TData>
{
public Metadata(TData data)
{
Data = data;
}
public Type DataType
{
get { return typeof(TData); }
}
object IMetadata.Data
{
get { return Data; }
}
public TData Data { get; private set; }
}
您可以派生一个针对值类型的版本:
public interface IValueTypeMetadata : IMetadata
{
}
public interface IValueTypeMetadata<TData> : IMetadata<TData>, IValueTypeMetadata where TData : struct
{
}
public class ValueTypeMetadata<TData> : Metadata<TData>, IValueTypeMetadata<TData> where TData : struct
{
public ValueTypeMetadata(TData data) : base(data)
{}
}
这可以扩展到任何类型的通用约束。
https://stackoverflow.com/questions/353126
复制相似问题