Мне нужно каким-то образом пометить базовые интерфейсы и определить, реализовал ли класс базовый интерфейс или его производный интерфейс. C# не позволяет иметь «абстрактный интерфейс». Есть ли способ сделать это в C#?Базовый интерфейс в C#
public interface IBaseFoo
{
void BaseMethod();
}
public interface IFoo : IBaseFoo
{
void FooMethod();
}
public class Base
{
}
public class A : Base, IFoo
{
}
public class B : Base, IBaseFoo
{
}
Теперь в следующем методе нужно проверить, если typeCls
реализован в IFoo
или IBaseFoo
без явного указания типов. Мне нужен способ отметить базовый интерфейс и определить его в методе. (То есть: если с # допускаются имеющим абстрактный интерфейс, я мог бы проверить, если IsAbstract
свойства интерфейсов typeClas
)
public bool IsBaseFooImplemented<T>(T typeCls) where T : Base
{
// Here I need to check if the typeCls is implemented the IFoo or IBaseFoo
}
Это немного пахнет. Вы говорите, что вам «нужно», чтобы проверить это - зачем вам нужно проверять? Что вы пытаетесь достичь, что, по вашему мнению, стандартный SOLID OO не даст вам? Потому что вы собираетесь нарушить/закрыть, поэтому тщательно подумайте, прежде чем вы это сделаете. –