c# - C# 覆盖默认接口方法
问题描述
是否可以在另一个接口中覆盖默认接口方法?
假设我有以下代码:
public class Program
{
public static void Main()
{
IOriginal origOrig = new Original();
IOriginal origInh = new Inherited();
IInherited inherited = new Inherited();
Console.WriteLine($"IOriginal Original: {origOrig.Method()}");
Console.WriteLine($"IOriginal Inherited: {origInh.Method()}");
Console.WriteLine($"IInherited Inherited: {inherited.Method()}");
}
}
public interface IOriginal
{
string Method() => "original";
}
public interface IInherited : IOriginal
{
string Method() => "inherited";
}
public class Inherited : IInherited {}
public class Original : IOriginal {}
输出是
IOriginal Original: original
IOriginal Inherited: original
IInherited Inherited: inherited
但是,我想覆盖IInherited
接口中的方法,所以它会产生这个:
IOriginal Original: original
IOriginal Inherited: inherited
IInherited Inherited: inherited
在C# 8 规范提案中,它是通过这样做提出的:
interface IA
{
void M() { WriteLine("IA.M"); }
}
interface IB : IA
{
override void IA.M() { WriteLine("IB.M"); } // explicitly named
}
interface IC : IA
{
override void M() { WriteLine("IC.M"); } // implicitly named
}
但在正式发布时,它不起作用?
Compilation error: The modifier 'override' is not valid for this item
有什么办法可以做到这一点?
解决方案
使用:
interface IB : IA
{
void IA.M() { WriteLine("IB.M"); } // explicitly named
}
似乎工作。
但是我找不到任何 C# 文档说这是正确的语法!
推荐阅读
- python - 非二次二维矩阵的插值
- c# - 使用实体框架和批量更新获取错误“无效的列名”
- python - 使用 Python 抓取以在 Wordpress 上发布 (XML-RPC)
- google-apps-script - 使用 Google Apps 脚本在 Google 网站中添加/删除编辑器
- typescript - UnitTest with Jest 抛出错误:无法识别编码:'cesu8' 尝试连接 mysql 数据库
- mysql - 显示表 MYSQL 中可用的最近 3 个月的数据
- c# - 如何在视图中使用模型数据?
- c# - Json.NET 反序列化属性而不反序列化其上方的父对象
- r - 如何在 R 上创建费率
- mobile - 需要在桌面和移动设备中打开 .ics 日历文件