c# - 为什么我不能覆盖我的接口(interface)方法?

标签 c# interface overriding

假设我有一个如下所示的界面。

interface CardHolder : IEnumerable<Card>
{
    /// <summary> ...
    void PutCard(Card card);

    /// <summary> ...
    void PutCards(Card[] card);

    /// Some more methods...
}

我是这样实现的。

public class ArrayCardHolder : CardHolder
{
    private Card[] _cards;
    private int _size = 0;

    public ArrayCardHolder(int capacity)
    {
        _cards = new Card[capacity];
    }

    public void PutCard(Card card)
    {
        if (IsFull())
            throw new Exception("This CardHolder is full. Capacity: " + Capacity());

        _cards[_size++] = card;
    }

    public void PutCards(Card[] cards)
    {
        if (_size + cards.Length > _cards.Length)
            throw new Exception("Adding the Cards would exceed this CardHolder its capacity. Capacity: " + Capacity());

        for (int index = 0; index < cards.Length; index++)
            _cards[_size++] = cards[index];
    }
    public IEnumerator<Card> GetEnumerator()
    {
        for (int index = 0; index < _size; index++)
            yield return _cards[index];
    }

    System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
    {
        return this.GetEnumerator();
    }

    ///More methods.

}

为什么我不能使用 override我的关键字 ArrayCardHolder (例如 public void override PutCard(Card card) { ///implementation } 表示该方法实现(即覆盖)接口(interface)?在这种情况下,项目将拒绝构建。

为什么它在覆盖 ToString() 时仍然有效? ?为什么在实现 CompareTo(T t) 时它不起作用来自 IComparable<T>

我应该改用什么?我担心接口(interface)中的文档不适用于我的实现方法。当 @Override 时,Java 就是这种情况。使用注释。

最佳答案

接口(interface)的方法不是覆盖,而是实现。您对可以覆盖的抽象/虚拟方法感到困惑。

例子:

public interface IFoo    
{
    void DoA();
}

public abstract class BaseFoo : IFoo
{
    public void DoA() { } // *this HAS to be implemented*
    public virtual void DoB() { } 
}

public abstract class MyFoo : BaseFoo
{
    // *this CAN be implemented, which would override the default implementation*
    public override void DoB() { } 
}

正如其他人所提到的,ToStringvirtual基类的方法object ,这就是您可以覆盖它的原因。

关于c# - 为什么我不能覆盖我的接口(interface)方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38273352/

相关文章:

c++ - boost shared_ptr 接口(interface)/对象

c# - C# 中的方法可以覆盖另一个方法并同时是虚拟的吗?

c# - 用于在不更改代码库的情况下处理不同本体的库

c# - 使用适配器模式包装系统对象(文件、服务 Controller 等)与绕行进行单元测试相比有什么优势?

c# - 我的 Azure 开发环境总是将我重定向到错误页面

与服务器交互的 Android 应用程序

c# - .NET Core - 为什么我应该使用 View 组件而不是集成在 MVC 应用程序或 Razor 页面中的 Blazor 组件

具有类型安全实现的 Java 泛型接口(interface)

c++ - 用私有(private)基函数覆盖公共(public)虚函数?

java - TimePicker onTimeSet 未被调用