是否可以覆盖另一个接口中的默认接口方法?
假设我有以下代码:
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 specification proposal 中,建议这样做:
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
有什么办法可以实现吗?
答案 0 :(得分:2)
使用:
interface IB : IA
{
void IA.M() { WriteLine("IB.M"); } // explicitly named
}
我找不到任何 C# 文档说这是正确的语法!