首页 > 解决方案 > 具体类可以将方法实现委托给子类吗?

问题描述

我有一个具体的顶级 FooBase 和一个接口IFoo:

public class FooBase
{
    //some code
}

public interface IFoo
{
    void DoBar();
}

每个子类 FooChild 都实现并扩展了两者:

public class FooChild : FooBase, IFoo
{
    public void DoBar()
    {
        //some implementation
    }
}

具体的 FooBase可以定义一个空方法的签名,以便像 IFoo 接口那样将实现委托给子类吗?

标签: c#class

解决方案


基类可以通过三种方式允许或强制其继承者实现所需的签名:

1.虚拟方法(允许实现)

public interface IFoo { void DoBar(); }
public class Foo : IFoo { public virtual void DoBar() { /*Default impl. */ }
public class FooChild : Foo { public override void DoBar() { /* Child impl. */ }

2. 抽象方法(强制执行)

public interface IFoo { void DoBar(); }
public abstract class FooBase : IFoo { public abstract void DoBar(); }
public class FooChild : FooBase { public override void DoBar() { /* Child impl. */ }

3. 抽象分离方法(强制实现,接口没有直接的逻辑附加)

public interface IFoo
{
    void DoBar();
}
public abstract class FooBase : IFoo
{
    public void DoBar() { DoBarRelatedWork(); }
    protected abstract void DoBarRelatedWork();
}
public class FooChild : FooBase
{
    public override void DoBarRelatedWork() { /* Child impl. */ }
}

推荐阅读