奇怪的问题:
想象一下,我有一个名为BaseFoo的基类。我有一个名为IFoo的方法接口。我在BaseFoo下面有很多类。
如果我在BaseFoo中实现接口,我不需要在继承的类中实现,对吗?
好的,但想象一下,我有一个处理IFoo的通用功能。我是否需要明确声明他们实施IFoo?
像这样(伪插图代码)
public class BaseFoo:IFoo;
public interface IFoo;
我应该这样做吗?
public class AmbarFoo:BaseFoo,IFoo
或
public class AmbarFoo:BaseFoo
最正确的方法是什么?效果是否相同?如果我测试AmbarFoo是否是IFoo我会得到什么?
由于
答案 0 :(得分:7)
无论如何,它的行为方式都是一样的。如果要使用显式接口实现重新实现接口,则只需重新声明接口名称。 AmbarFoo
的实例确实会“说”它实现IFoo
。
答案 1 :(得分:0)
如果我实现了界面 BaseFoo,我不需要实现 继承的类,对吗?
不,因为BaseFoo将被强制实施,子类将继承实现。他们仍将是IFoos。
答案 2 :(得分:0)
在你的情况下,它不会改变任何东西。
但是,请看下面的内容:
public interface IFoo
{
void Bar();
}
public class FooBase
: IFoo
{
public void Bar()
{
Console.WriteLine("FooBase");
}
}
public sealed class SubFoo
: FooBase//, IFoo
{
public new void Bar()
{
Console.WriteLine("SubFoo");
}
}
现在运行以下命令并注释掉“//,IFoo”。
SubFoo foo = new SubFoo();
foo.Bar();
((IFoo) foo).Bar();
然而,这在理论上更为明确。
离开它。