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是否实现了IFooIBaseFoo,而没有显式指定类型。我需要一种方法来标记基本接口并在方法中识别它。(即:如果c#允许有抽象接口,我可以检查typeClas接口的IsAbstract属性)

public bool IsBaseFooImplemented<T>(T typeCls) where T : Base
{
     // Here I need to check if the typeCls is implemented the IFoo or IBaseFoo
}

因为IFoo : IBaseFoo,每个实现IFoo的类也实现了IBaseFoo。但不是反过来,所以您可以简单地检查typeCls is IFoo .

请注意,基于实现的接口更改行为通常是一种设计气味,它首先绕过了接口的使用。

//somewhere define 
static List<IBaseFoo> list = new List<IBaseFoo>();
public class A : Base, IFoo
{
    public A()
    {
        YourClass.list.add(this);
    }
}
public class B : Base, IBaseFoo
{
    public B()
    {
        YourClass.list.add(this);
    }
}

//然后你可以检查一个类是否为IFoo。

public bool IsBaseFooImplemented<T>(T typeCls) where T : Base
{
     foreach(var c in list )
     {
         if(typeof(c) == typeCls) return true;
     }
     return false;
}

我没有测试代码,但它应该工作

相关内容

  • 没有找到相关文章

最新更新