Информация об изменениях

Сообщение Re[4]: [ООП] Наследование интерфейсов друг от друга от 31.01.2024 11:51

Изменено 31.01.2024 12:45 Serginio1

Re[4]: [ООП] Наследование интерфейсов друг от друга
Здравствуйте, Sinclair, Вы писали:

S>Здравствуйте, Serginio1, Вы писали:

S>> IEnumerable позволяет избавиться от рефлексии когда нужно привести тип к IEnumerable в каком то общем методе вместо

S>>
S>> while (objType!=null && objType != typeof(object))
S>> {
S>>     if (objType.IsGenericType && 
S>>         objType.GetGenericTypeDefinition() == typeof(IEnumerable<>))
S>>         return true;
S>>     objType = objType.BaseType;
S>> }
S>>


S>Зачем вам такой код? Что он делает?


Это пример. Мне нужно найти некий обобщенный интерфейс не привязанный к конкретному типу и вызвать его метод.
Например если бу не было IEnumerable мне бы пришлось вместо

if (obj is IEnumerable ie)
ie.GetEnumerator();



Пришлось бы сначала через цикл и GetGenericTypeDefinition() получить является он реализацией IEnumerable<>
а затем через рефлексию вызвать "GetEnumerator"

Например .Net Core, AppDomain, WCF, RPC маршалинг по Tcp/Ip свой велосипед
Re[4]: [ООП] Наследование интерфейсов друг от друга
Здравствуйте, Sinclair, Вы писали:

S>Здравствуйте, Serginio1, Вы писали:

S>> IEnumerable позволяет избавиться от рефлексии когда нужно привести тип к IEnumerable в каком то общем методе вместо

S>>
S>> while (objType!=null && objType != typeof(object))
S>> {
S>>     if (objType.IsGenericType && 
S>>         objType.GetGenericTypeDefinition() == typeof(IEnumerable<>))
S>>         return true;
S>>     objType = objType.BaseType;
S>> }
S>>


S>Зачем вам такой код? Что он делает?


Это пример. Мне нужно найти некий обобщенный интерфейс не привязанный к конкретному типу и вызвать его метод.
Например если бу не было IEnumerable мне бы пришлось вместо


 if (obj is IEnumerable ie)
  ie.GetEnumerator();



Пришлось бы сначала через цикл и GetGenericTypeDefinition() получить является он реализацией IEnumerable<>
а затем через рефлексию вызвать "GetEnumerator"

Например .Net Core, AppDomain, WCF, RPC маршалинг по Tcp/Ip свой велосипед