Ограничить тип недвижимости - PullRequest
0 голосов
/ 01 сентября 2011

Добрый день,

У меня есть класс, который представляет коллекцию.Коллекция имеет свойство типа 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 ]

1 голос
/ 01 сентября 2011

Попробуйте использовать обобщенные и типовые ограничения в своем конструкторе вместо установки открытого поля MetaDataType в классе Collection.

public CollectionImplementation<T>(T MetaDataType) where T : NameOfInterface
{
}
0 голосов
/ 01 сентября 2011

Вы можете использовать ограничения для универсальных типов.

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

Или вы можете просто создать исключение при добавлении таких элементов, как:

if( !( addedElement is IMetaInterface )) throw new Exception("Please don't do this");
...