c# - 具体类可以将方法实现委托给子类吗?
问题描述
我有一个具体的顶级 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 接口那样将实现委托给子类吗?
解决方案
基类可以通过三种方式允许或强制其继承者实现所需的签名:
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. */ }
}
推荐阅读
- javascript - 反应。TypeError:当我尝试通过 axios 发布请求向 api 发送数据时,将循环结构转换为 JSON
- html - 如何从 html5 脚本向 django rest 框架进行 API 调用?
- javascript - 根据活动轮播项目显示不同的数据
- c - 联合声明和定义
- c# - Environment.Exit(0) 和 Environment.Exit(Environment.ExitCode) 有什么区别?
- python - OSM Overpy 几何
- excel - 通过循环清除内容
- mongodb - 配置批处理配置器以在 Spring Batch 中包含带有 Spring Data MongoDb 的事务
- php - 在 php 中创建的文件和 kotlin 应用程序之间的数据加密
- google-app-engine - 从经过身份验证的请求中转发 OAuth 2 凭据(特别是在 GCP 中)