惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Cloudbric
Cloudbric
T
The Blog of Author Tim Ferriss
美团技术团队
S
SegmentFault 最新的问题
罗磊的独立博客
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
IT之家
IT之家
P
Privacy & Cybersecurity Law Blog
N
News and Events Feed by Topic
爱范儿
爱范儿
T
Threatpost
The Cloudflare Blog
Spread Privacy
Spread Privacy
Latest news
Latest news
Last Week in AI
Last Week in AI
V
Vulnerabilities – Threatpost
Hugging Face - Blog
Hugging Face - Blog
T
Tor Project blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Project Zero
Project Zero
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
T
Tenable Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - 司徒正美
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
T
The Exploit Database - CXSecurity.com
Security Latest
Security Latest
C
CERT Recently Published Vulnerability Notes
T
Threat Research - Cisco Blogs
Hacker News - Newest:
Hacker News - Newest: "LLM"
有赞技术团队
有赞技术团队
P
Proofpoint News Feed
Hacker News: Ask HN
Hacker News: Ask HN
L
Lohrmann on Cybersecurity
阮一峰的网络日志
阮一峰的网络日志
C
Cyber Attacks, Cyber Crime and Cyber Security
量子位
I
Intezer
C
Check Point Blog
Stack Overflow Blog
Stack Overflow Blog
博客园 - 【当耐特】
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
N
Netflix TechBlog - Medium
H
Heimdal Security Blog
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Blog — PlanetScale
Blog — PlanetScale
G
Google Developers Blog

博客园 - Rwing

C# 13(.Net 9) 中的新特性 - 半自动属性 [翻译].NET 8 的原生AOT及高性能Web开发中的应用[附性能测试结果] C# 13(.Net 9) 中的新特性 - 扩展类型 如何在 Docker 环境下自动给 .NET 程序生成 Dump [翻译] 预览 C# 10 的新东西 [翻译]正式宣布 Visual Studio 2022 [翻译]Azure 网关迁移至 .NET Core 3.1 性能提升一倍 C# 9.0 新特性预览 - init-only 属性 C# 9.0 新特性预览 - 顶级语句 C# 9.0 新特性预览 - 空参数校验 C# 9.0 新特性预览 - 类型推导的 new - Rwing [翻译] 使用 Serverless 和 .NET Core 构建飞速发展的架构 - Rwing [翻译] .NET Core 3.0 RC 1 发布 - Rwing [翻译] .NET Core 3.0 Preview 9 发布 - Rwing [翻译] .NET Core 3.0 Preview 7 发布 - Rwing [翻译] 正式宣布 .NET 5 - Rwing [翻译] ASP.NET Core 利用 Docker、ElasticSearch、Kibana 来记录日志 - Rwing [翻译] Visual Studio 2019: 极速编码. 智能工作. 创造未来. - Rwing [翻译] 使用 .NET Core 3.0 创建一个 Windows 服务 - Rwing
[翻译] C# 8.0 接口默认实现 - Rwing
Rwing · 2019-05-16 · via 博客园 - Rwing

原文: Default implementations in interfaces

随着上周的 .NET Core 3.0 Prview 5Visual Studio 2019 version 16.1 Preview 3 的发布,这个包含在 C# 8.0 中的最后一个主要特性在预览版中可用了。

软件发展的一大障碍是,无法将新成员添加到公共接口。这会破坏现有的接口实现者,因为他们没有为新成员做实现!

接口默认实现将帮助解决这个问题。现在接口成员将可以指定一个代码实现,如果实现类或结构体不提供该成员的实现,则不会发生错误,而是使用默认实现。

假设我们提供了以下接口:

interface ILogger
{
    void Log(LogLevel level, string message);
}

一个现有的类,可能存在于不同的库和不同的拥有者,实现 ILogger

class ConsoleLogger : ILogger
{
    public void Log(LogLevel level, string message) { ... }
}

现在,我们要添加另一个 Log 方法的重载到接口中。 我们可以在不破坏现有实现的情况下通过默认接口实现来做到这一点:

interface ILogger
{
    void Log(LogLevel level, string message);
    void Log(Exception ex) => Log(LogLevel.Error, ex.ToString());
}

ConsoleLogger 类仍然满足接口提供的约束,如果它被转换为接口并且调用了新的Log方法,它仍然可以正常工作,接口的默认实现就会被调用:

public static void LogException(ConsoleLogger logger, Exception ex)
{
    ILogger ilogger = logger; // Converting to interface
    ilogger.Log(ex);          // Calling new Log overload
}

当然,实现类也可以以自己的方式自由实现新的接口成员。在这种情况下,默认实现就会被忽略了。

了解默认实现的更多内容,请在 Microsoft Docs 上查看这个教程 Tutorial: Update interfaces with default interface members in C# 8

编码愉快!

Mads