美好的一天,
我有一个代表集合的类。该集合具有类型Type
的属性,允许您指定每个元素的元数据对象的数据类型。每次将一个元素添加到集合时,都会在集合类中使用Activator.CreateInstance(Type type)
创建已分配元数据对象的新实例。
我需要的是将元数据对象的类型限制为实现特定接口的类型。例如:
publlic class Collection
{
public Type MetaDataType;
// other code
}
public class CollectionImplementation
{
// some properties
public CollectionImplementation()
{
Collection c = new Collection();
// valid assignment
c.MetaDataType = typeof(ValidMetaClass);
// invalid assignement
c.MetaDataType = typeof(InvalidMetaClass);
}
// some functions
}
public class ValidMetaClass : IMetaInterface
{
// valid meta class code
}
public class InvalidMetaClass
{
// invalid meta class code
}
public interface IMetaInterface
{
// interface code
}
这样的事情可能吗?
提前感谢任何和所有贡献者;我感谢任何和所有的意见。
亲切的问候, 我
答案 0 :(得分:1)
尝试在构造函数上使用泛型和类型约束,而不是在Collection类中设置公共字段MetaDataType。
public CollectionImplementation<T>(T MetaDataType) where T : NameOfInterface
{
}
答案 1 :(得分:0)
您可以对泛型类型使用限制。
public class Collection<T> where T : IMetaInterface
{
T MetaDataType;
}
或者您可以在添加以下元素时抛出异常:
if( !( addedElement is IMetaInterface )) throw new Exception("Please don't do this");