实现子类中的接口的基类

car*_*995 0 .net c#

using System;


public interface MustImplement
{
    public void DoSomething();
}

public class Base
{
    public void DoSomething()
    {
        Console.WriteLine("Something must be done");
    }
}

public class Child: Base, MustImplement
{
    //I don't have to implement the MustImplement interface here since the base class did it.
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,子类仅使用DoSomething()基类中的实现,并且编译器将其视为有效。

我看到有人在他们的代码中做了类似的事情,这就是为什么我创建一个代码片段只是为了传达这个想法。

有什么理由我们应该这样做而不是在基类中执行public class Base: MustImplement和实现?public virtual void DoSomething()

Gur*_*ron 6

这有时也被称为准实现,我认为它没有太多有用的地方。我能想到的一件事是,由于某种原因,需要有不同的继承者,其中一些继承者不应实现IMustImplement(尽管您仍然可以使用显式接口实现“重新抽象” void MustImplement.DoSomething() => base.DoSomething();,或隐藏一个 - public new void DoSomething() => base.DoSomething();)。

或者Base类来自某个包并且public class Base : IMustImplement无法完成。

请注意,找到这样的准实现可能有点令人头疼,不确定所有 IDE 是否完全支持它们,因此如果可能的话,并且没有实际需要将继承者限制/拆分为实现接口的继承者,而不是实现接口的继承者 -将其移至基类,我认为这将使代码更具可读性和直观性。