0

有没有办法为接口指定允许的子类?

假设我有这些课程:

public interface IDoable // specify that only A or it's subclasses can implement IDoable
{
    void Do();
}

public class A : IDoable
{
    public void Do(){};
    public void Foo(){};
}

public class B : IDoable // implementing IDoable on something other than A or its sublcasses doesn't make any sense
{
    // public void Do();
}

所以以后我将能够做到这一点:

IDoable d = new A();
d.Do();
d.Foo(); // I'd like to be able to do this.

C# 支持这种特性吗?

4

3 回答 3

3

不,它没有。一个接口代表一个契约,任何可以访问它的类都可以实现它。

您当然可以通过制作它来限制对它的访问internal(因此只有同一个程序集可以访问它)。

于 2012-09-04T15:13:16.807 回答
2

有没有办法为接口指定允许的子类?

不,任何类都可以实现一个接口,只要它可以访问它。接口的全部意义在于向它的消费者隐藏具体的类型/实现,所以对我来说,以你建议的方式耦合它是没有意义的。

于 2012-09-04T15:15:58.627 回答
2

您可以投射 dA以便能够调用Foo它:

((A)d).Foo();

请注意,如果d不是A,这将引发异常。

其他选项是测试dusingisas运算符的类型。

这当然与一开始就使用界面的观点背道而驰。

于 2012-09-04T15:12:00.067 回答