扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
怎么在C#8.0项目中开启默认接口?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
创新互联服务项目包括靖江网站建设、靖江网站制作、靖江网页制作以及靖江网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,靖江网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到靖江省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!开启 .NET Core 3.0 的支持
对于预览版的 Visual Studio 2019 来说,.NET Core 的预览版是默认打开且无法关闭的,所以不需要关心。
开启 C# 8.0 支持
请设置你项目的属性,修改 C# 语言版本为 8.0(对于预览版的语言来说,这是必要的):
或者直接修改你的项目文件,加上 LangVersion
属性的设置,设置为 8.0
。
Exe netcoreapp3.0 8.0
默认接口实现
以前的做法
比如,我们现在有下面这样一个简单的接口:
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); ++ } ++ }
关于怎么在C#8.0项目中开启默认接口问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注创新互联成都网站设计公司行业资讯频道了解更多相关知识。
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流