如何在 C# 8 中使用默认接口技巧
C# 8 中新增了一个很是风趣的特征,叫做 默认接口要领 (又称假造扩展要领),这篇文章将会接头 C# 8 中的默认接口要领以及怎样行使。 在 C# 8 之前,接口不能包括要领界说,只能在接口中界说要领署名,尚有一个就是接口的成员默认是 public 和 abstract , 在 C# 8 之前,接口不能包括字段,也不能包括private, protected, 可能 internal 的要领成员。假如你在接口中引入了一个新成员,默认环境下你必需更新实现该接口的全部子类。 在 C# 8 中可以在接口界说要领的默认实现,并且还可以界说接口成员为 private,protect,乃至是 static,尚有一点挺奇葩的,一个接口的 protect 成员是不能被实现类所会见的,相反,它只能在子接口中被会见,接口的 virtual 成员可以由派生接口 override,但不能被派生类 override,尚有一点请留意,接口今朝还不能界说 实例成员。 为什么要行使默认接口要领 所谓的 默认接口要领 指的是接口中界说了一个默认实现的要领, 假如实现该接口的类没有实现默认接口要领的话,那么这个 默认接口要领 只能从接口长举办会见,这是一个很有效的特征,由于它可以辅佐开拓职员在不粉碎现有成果的环境下向接口的将来版本添加新要领。 思量下面的 ILogger 界说。 public interface ILogger { public void Log(string message); } 下面的两个类扩展了ILogger接口并实现了Log()要领。 public class FileLogger : ILogger { public void Log(string message) { //Some code } }
public class DbLogger : ILogger { public void Log(string message) { //Some code } } 此刻假设你想在ILogger接口中新增一个要领,该要领接管两个参数:一个 文本 一个 日记级别,下面的代码片断展示了日记级此外列举类。 public enum LogLevel { Info, Debug, Warning, Error } 修改后的 ILogger 接口如下: public interface ILogger { public void Log(string message); public void Log(string message, LogLevel logLevel); } 好了,此刻题目来了,由于 ILogger 中新增了一个 Log 要领,你必必要在全部实现该接口的全部子类中实现 Log(string message, LogLevel logLevel) 要领,这就很忧伤了,假如不这样做的话,编译器必定是不会放行的,在实际环境下,这个接话柄现类也许在多个 dll 中,乃至在多个团队中,可想而知,这个事变量长短常大而且很是疾苦的。 (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |