2013-09-09 2 views
1

Есть ли способ реализовать параметры типа ограничения, где T является базовым классом или если T является списком, содержащим «базовый класс»?Ограничения по типу Параметры для объекта и списка объектов

Что-то вида:

public class SomeClass<T> where T : MyBaseClass, IList<MyBaseClass> 

ответ

3

Нет, вы не можете создать общие ограничения для работы как OR.

И только отметить, что такого рода ограничения были бы бесполезны, вы не смогли бы использовать ни методы, определенные в BaseClass, ни их из IList (потому что T может быть первым или второй).

0

Почему бы вам не реализовать интерфейс на BaseClass и не делать.

public class SomeClass<T> where T : class, IBaseInterface 

Это также гарантирует, что дети реализуют соответствующие контракты, которые вы хотите предъявить.

1

Нет, но вы могли бы перегружен методы, которые принимают один или другой:

public class SomeClass<T> where T : MyBaseClass 
{ 
    public void Process(T instance) 
    { 
    } 

    public void Process(IList<T> list) 
    { 
    } 
} 
Смежные вопросы