C# 覆盖重叠法

C# 覆盖重叠法,c#,.net,cil,C#,.net,Cil,问题很短,但我没有找到解决办法 假设我们有类层次结构 public abstract class A { public virtual string Print() { return "A"; } } public class B : A { public virtual new string Print() { return "B"; } } public class C : B { public override string Print() { return "

问题很短,但我没有找到解决办法

假设我们有类层次结构

public abstract class A
{
    public virtual string Print() { return "A"; }
}

public class B : A
{
    public virtual new string Print() { return "B"; }
}

public class C : B
{
    public override string Print() { return "C"; }
} 
可以在C类中重写A.打印吗?我尝试将其作为显式接口实现:

string A.Print() { return "C"; }
但这里我得到一个错误:

显式接口声明中的“A”不是接口


我认为这根本不可能,但如果您能收到任何其他信息,我将不胜感激。

我还没有尝试过,但您可以轻松地-

interface IA
{
  string Print();
}

interface IB
{
  string Print();
}


public abstract class A : IA
{
    IA.Print() { return "A"; }
}

public class B : IB, A
{
    IB.Print() { return "B"; }
}
不能在C#中使用,但可以在IL中使用
.override
关键字来覆盖该方法将使用的vtable插槽。(注意:方法名
Namespace.A.Print
并不重要,在方法名中包含完整的类型名只是一种避免冲突的有用方法,就像C#对显式接口实现所做的那样)


您的问题同时标记为C#和CIL。你想在C#中这样做,还是愿意在CIL中编写
C
。@svick因为我不确定在C#或IL中是否可行,所以请看Brian的答案。现在你知道为什么我在问题中添加了cil标签:)用于IL,+1!纯粹的恶棍:)
.class public auto ansi beforefieldinit Namespace.C
    extends [x]Namespace.B
{
    .method private hidebysig virtual 
        instance string Namespace.A.Print () cil managed 
    {
        .override method instance string [x]Namespace.A::Print()
        .maxstack 1
        ldstr "C"
        ret
    }
}