咨询行业网站制作,管理人员需要培训哪些课程,阿里巴巴外贸平台费用,建设电子商务网站期末考试当你升级到 C# 8.0 和 .NET Core 3.0 之后#xff0c;你就可以开始使用默认接口实现的功能了。从现在开始#xff0c;你可以在接口里面添加一些默认实现的成员#xff0c;避免在接口中添加成员导致大量对此接口的实现崩溃。要写出并且正常使用接口的默认实现#xff0c;你需… 当你升级到 C# 8.0 和 .NET Core 3.0 之后你就可以开始使用默认接口实现的功能了。从现在开始你可以在接口里面添加一些默认实现的成员避免在接口中添加成员导致大量对此接口的实现崩溃。要写出并且正常使用接口的默认实现你需要C# 8.0.NET Core 3.0Visual Studio 2019 Preview (16.1 以上版本)前往下载安装 Visual Studio Preview对于预览版的 Visual Studio 2019 来说.NET Core 的预览版是默认打开且无法关闭的所以不需要关心。请设置你项目的属性修改 C# 语言版本为 8.0对于预览版的语言来说这是必要的或者直接修改你的项目文件加上 LangVersion 属性的设置设置为 8.0。Project SdkMicrosoft.NET.Sdk PropertyGroup OutputTypeExe/OutputType TargetFrameworknetcoreapp3.0/TargetFramework LangVersion8.0/LangVersion /PropertyGroup/Project比如我们现在有下面这样一个简单的接口public interface IWalterlv{ void Print(string text);}这个接口被大量实现了。现在我们需要在接口中新增一个方法 DouBPrint其作用是对 Print 方法进行标准化避免各种不同实现带来的标准差异。于是我们新增一个方法 public interface IWalterlv { void Print(string text); void DouBPrint(string text); }然而我们都知道这样的修改是破坏性的会使得所有实现这个接口的代码全部失败无法编译通过或者运行时抛出异常我们依然很难将接口的实现标准化靠文档来规约那么现在我们可以这样来新增此方法 public interface IWalterlv { void Print(string text);-- void DouBPrint(string text); public void DouBPrint(string text) Print($Walterlv 逗比 {text}); }在使用此方法来定义此接口中的方法后那些没来得及实现此方法的类型也可以编译通过并获得标准化的实现。class Program{ static void Main(string[] args) { IWalterlv walterlv new Foo(); walterlv.DouBPrint(walterlv); }}public class Foo : IWalterlv{ public void Print(string text) { }}当然对于 Foo 类型来说实现也是可以的public class Foo : IWalterlv{ public void Print(string text) { } public void DouBPrint(string text) Print($Walterlv 逗比 {text});}除此之外在接口中还可以编写静态字段和静态方法这可以用来统一接口中的一些默认实现。意味着如果类没有实现接口中带有默认实现的方法那么具有默认的实现而如果类中打算实现接口中的带有默认实现的方法那么也可以调用接口中的静态方法来进行实现。 public interface IWalterlv { void Print(string text);-- public void DouBPrint(string text) Print($Walterlv 逗比 {text}); public void DouBPrint(string text) DefaultDouBPrint(this, text); private static readonly string _name walterlv; protected static void DefaultDouBPrint(IWalterlv walterlv, string text) walterlv.Print(${_name} 逗比 {text}); }然后对于实现方则需要使用接口名来调用接口中的静态成员 public class Foo : IWalterlv { public void Print(string text) { }-- public void DouBPrint(string text) Print($Walterlv 逗比 {text}); public void DouBPrint(string text) { // Do Other things. IWalterlv.DefaultDouBPrint(this, text); } }参考资料Default implementations in interfaces - .NET BlogVisual Studio 2019 version 16.1 Preview 3 - The Visual Studio BlogSafely update interfaces using default interface members in C# - Microsoft Docs原文地址https://walterlv.com/post/default-interface-members-practise.html.NET社区新闻深度好文欢迎访问公众号文章汇总 http://www.csharpkit.com