限制属性类型

时间:2011-09-01 16:05:37

标签: interface properties implements

美好的一天,

我有一个代表集合的类。该集合具有类型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
}

这样的事情可能吗?

提前感谢任何和所有贡献者;我感谢任何和所有的意见。

亲切的问候, 我

2 个答案:

答案 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");