是否可以在 C# 中的子接口中重写父接口方法

本文关键字:接口 重写 方法 是否 | 更新日期: 2023-09-27 18:33:25

>我有一个接口层次结构,我试图使用正确的.net xml注释来记录它。我有一个由层次结构中的所有接口共享的方法,我在顶层声明,我想对子接口给出更具体的评论。

换句话说,像这样:

public interface IAnimal
{
    /// <summary>Returns a string often spoken by this animal.</summary>
    string speak();
}
public interface IDog : IAnimal
{
    /// <summary>Returns a string representation of some barking noise.</summary>
    string speak();
}
public interface IDuck : IAnimal
{
    /// <summary>Returns a string representation of some quacking noise.</summary>
    string speak();
}

当我尝试编译它时,我收到有关"方法隐藏"的警告,我很确定我不想这样做。 尝试在方法前面插入"覆盖"和"虚拟"关键字会产生错误而不是警告。有什么方法可以在不破坏类型之间的继承的情况下,在子接口上为该方法显示不同的描述?

是否可以在 C# 中的子接口中重写父接口方法

对您的问题的简短回答是"否"。在 C# 中,除非重写派生方法,否则无法修改派生方法,并且由于无法重写接口方法,因此派生接口中的任何新声明都将仅隐藏原始声明。

派生接口实际上只是附加了更多的方法,它不能以任何方式更改、增强或调整基本定义,包括 XML 注释 - 只是没有地方放置这些。当然,如果您改用抽象基类,这是可能的,但即便如此,也只是人为地,通过"重写"抽象方法来简单地调用基。