继承和接口.NET

时间:2010-01-15 16:06:04

标签: c# oop

奇怪的问题:

想象一下,我有一个名为BaseFoo的基类。我有一个名为IFoo的方法接口。我在BaseFoo下面有很多类。

如果我在BaseFoo中实现接口,我不需要在继承的类中实现,对吗?

好的,但想象一下,我有一个处理IFoo的通用功能。我是否需要明确声明他们实施IFoo?

像这样(伪插图代码)

public class BaseFoo:IFoo;

public interface IFoo;

我应该这样做吗?

public class AmbarFoo:BaseFoo,IFoo

public class AmbarFoo:BaseFoo

最正确的方法是什么?效果是否相同?如果我测试AmbarFoo是否是IFoo我会得到什么?

由于

3 个答案:

答案 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();

然而,这在理论上更为明确。

离开它。