0

再会,

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

这样的事情可能吗?

提前感谢所有贡献者;我感谢任何和所有输入。

亲切的问候,我

4

2 回答 2

1

尝试在构造函数上使用泛型和类型约束,而不是在 Collection 类中设置公共字段 MetaDataType。

public CollectionImplementation<T>(T MetaDataType) where T : NameOfInterface
{
}
于 2011-09-01T16:18:42.823 回答
0

您可以对泛型类型使用限制。

public class Collection<T> where T : IMetaInterface
{
T MetaDataType;
}

或者,您可以在添加以下元素时抛出异常:

if( !( addedElement is IMetaInterface )) throw new Exception("Please don't do this");
于 2011-09-01T16:18:10.420 回答