为什么我无法重写接口方法?

2023-11-25

假设我有一个如下界面。

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 (e.g. public void override PutCard(Card card) { ///implementation }表明该方法实现(即覆盖)接口?在这种情况下,该项目将拒绝建设。

为什么它在覆盖时有效ToString()?为什么在实施时不起作用CompareTo(T t) from IComparable<T>?

我应该用什么来代替?我担心接口中的文档不适用于我的实现方法。在 Java 中就是这样的情况,当@Override使用注释。


接口的方法不是被覆盖, 他们是实施的。你很困惑抽象/虚拟方法可以被覆盖。

Example:

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() { } 
}

正如其他人提到的,ToString is a virtual基类的方法object,这就是为什么你可以override it.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么我无法重写接口方法? 的相关文章

  • 多个源的 makefile

    在学习 make 文件时 我试图为多个源目录编写一个 make 文件 似乎我在某个地方错了 这是我的代码结构 directory common fun2 c inc fun h src fun1 c main c 这是我的生成文件 CC c
  • CMake 找不到请求的 Boost 库

    既然我已经浏览了其他人的解决方案几个小时 但找不到适合我的问题的正确答案 我想将我的具体问题带给您 我正在尝试使用 CMake 构建 vsomeip 为此 我之前构建了 boost 1 55 但是 我在 CMake 中收到以下错误 The
  • 单元测试验证失败

    我正在运行我的单元测试PostMyModel路线 然而 在PostMyModel 我用的是线Validate
  • 在 OnModelCreating 期间设置列名称

    Issue 我目前正在尝试通过设置的属性为我的表及其列添加前缀 我正在使用实体框架核心 我已经正确地为表名添加了前缀 但我似乎无法弄清楚列的前缀 我有一种感觉 我需要使用反射 我已经留下了我的 可能很糟糕的 反思尝试 有人有办法在实体中设置
  • 检测wlan是否关闭

    任何人都可以给我一个提示 如何在 Windows Phone 上以编程方式检测 C 8 1 应用程序 不是 8 0 是否启用 禁用 WLAN 我不想更改这些设置 只是需要知道 该解决方案是一个 Windows 8 1 通用应用程序 Wind
  • C# 5 async/await 线程机制感觉不对?

    为什么让调用线程进入异步方法直到内部 等待 一旦调用异步方法就生成一个线程 这不是更干净吗 这样您就可以确定异步方法会立即返回 您不必担心在异步方法的早期阶段没有做任何昂贵的事情 我倾向于知道某个方法是否要在 我的 线程上执行代码 不管是堵
  • 为什么'enable_if'不能用于禁用这里声明

    include
  • 使用 LINQ 更新 IEnumerable 对象的简单方法

    假设我有一个这样的业务对象 class Employee public string name public int id public string desgination public int grade List
  • 访问 ascx 文件中的母版页控件

    我有一个母版页文件 其中包含 2 个面板控件中的 2 个菜单 我还使用控件来检查用户是否登录并获取用户类型 根据我想要显示 隐藏面板的类型 控件本身不在母版页中引用 而是通过 CMS 系统动态引用 我想在用户控件中使用findcontrol
  • 使用查询表达式对 List 进行排序

    我在使用 Linq 订购这样的结构时遇到问题 public class Person public int ID get set public List
  • C# 编译器不会优化不必要的强制转换

    前几天 在写答案的时候这个问题 https stackoverflow com questions 2208315 why is any slower than contains在这里 关于溢出 我对 C 编译器感到有点惊讶 它没有按照我的
  • MFC:如何设置CEdit框的焦点?

    我正在开发我的第一个简单的 MFC 项目 但我正在努力解决一个问题 想要设置所有的焦点CEdit其中一个对话框中的框 我的想法是 当打开对话框时 焦点位于第一个编辑框上 然后使用 选项卡 在它们之间交换 我看到了方法SetFocus 但我无
  • 将接口转换为其具体实现对象,反之亦然?

    在 C 中 当我有一个接口和几个具体实现时 我可以将接口强制转换为具体类型 还是将具体类型强制转换为接口 这种情况下的规则是什么 Java 和 C 中都允许这两个方向 向下转型需要显式转型 如果对象类型不正确 可能会抛出异常 然而 向上转换
  • 如何在三个 IEnumerable 上使用 Zip [重复]

    这个问题在这里已经有答案了 可能的重复 使用 Linq 从 3 个集合创建项目 https stackoverflow com questions 5284315 create items from 3 collections using
  • 搜索实体的所有字段

    我正在尝试在客户数据库上实现 多功能框 类型的搜索 其中单个查询应尝试匹配客户的任何属性 这是一些示例数据来说明我想要实现的目标 FirstName LastName PhoneNumber ZipCode Mary Jane 12345
  • ASP.NET MVC 路由:如何从 URL 中省略“索引”

    我有一个名为 StuffController 的控制器 具有无参数索引操作 我希望从表单中的 URL 调用此操作mysite com stuff 我的控制器定义为 public class StuffController BaseContr
  • 如何停止无限循环?

    我正在编写一个程序 该程序将计算三角形或正方形的面积 然后提示用户是否希望计算另一个 我的代码已经运行到可以计算任一形状的面积的程度 但随后不再继续执行代码的其余部分 例如 如果选择了正方形 则计算面积 然后返回到正方形边长的提示 我假设这
  • INotifyPropertyChanged 和 propertyName

    我一直不确定它的含义propertyName实施时INotifyPropertyChanged 所以一般来说你实现INotifyPropertyChanged as public class Data INotifyPropertyChan
  • 如何将 SQL“LIKE”与 LINQ to Entities 结合使用?

    我有一个文本框 允许用户指定搜索字符串 包括通配符 例如 Joh Johnson mit ack on 在使用 LINQ to Entities 之前 我有一个存储过程 该存储过程将该字符串作为参数并执行以下操作 SELECT FROM T
  • 如何使用placement new重新初始化该字段?

    我的课程包含字段 private OrderUpdate curOrderUpdate 我一遍又一遍地使用它 经常需要重新初始化 for int i 0 i lt entries size i auto entry entries i ne

随机推荐

  • 如何调整图像大小以适合浏览器窗口?

    这看起来微不足道 但经过所有研究和编码后 我无法让它发挥作用 条件是 浏览器窗口大小未知 因此 请不要提出涉及绝对像素大小的解决方案 图像的原始尺寸未知 并且可能适合也可能不适合浏览器窗口 图像垂直和水平居中 必须保留图像比例 图像必须完整
  • 允许 NULL arg 进行 sscanf?

    Is a NULL允许将指针作为字符串来存储调用中的结果sscanf 我在任何文档中都没有找到有关它的任何内容 但它似乎工作正常 同样的事情与scanf Example int main int arc char argv char s N
  • 如何在 HandshakeInterceptor 中设置主体

    我正在使用 Spring 的 WebSockets 的一个非常精简的实现 WebSocketSession 有 getPrincipal 方法 但如何在 HandshakeInterceptor 中设置它 我想将校长放入的方法是 publi
  • 在 AngularJS 中使用 $window 或 $location 进行重定向

    我正在开发的应用程序包含各种状态 使用 ui router 其中一些状态要求您登录 其他状态是公开可用的 我创建了一种有效检查用户是否登录的方法 我目前遇到的问题实际上是在必要时重定向到我们的登录页面 应该注意的是 登录页面当前并未放置在
  • Celery - 检查工作人员是否收到 SIGTERM

    我有一个Celery任务相当长 超过几分钟 有时 由于各种原因 一个工作人员被标记为终止 而另一个工作人员则开始工作 如果需要更换运行它的计算机 或者正在部署新的代码版本 则可能会发生这种情况 在这种情况下 工作线程会收到 SIGTERM
  • 设置列的最大值

    我有一个表 其中有一列 int 类型 称为年龄 此列应包含最大值 50 如果超过 则不应更新该行 表示此列应采用 0 到 50 之间的值 如果我尝试将其更新为 51 则不允许 任何人都可以帮忙吗 尝试这个 CREATE TRIGGER ch
  • 我是否已达到浏览器中 JavaScript 可以处理的对象大小的限制?

    我正在嵌入一个大数组
  • 在 SQL Server 中查找重复行

    我有一个组织的 SQL Server 数据库 并且有许多重复的行 我想运行一个 select 语句来获取所有这些内容以及重复的数量 同时还返回与每个组织关联的 id 像这样的声明 SELECT orgName COUNT AS dupes
  • 使用匹配器的组方法时“未找到匹配”

    我在用着Pattern Matcher获取 HTTP 响应中的响应代码 groupCount返回 1 但在尝试获取它时出现异常 知道为什么吗 这是代码 get response code String firstHeader reader
  • CSS数据属性条件值选择器?

    给定 html 例如 div Jonh div div Jack div div Julian div 如何选择价值优于的元素1000 x gt 1000 首选项 通过 CSS 选择器 如果没有这样的事情 那么我将重新要求 JQuery J
  • 将参数从气流运算符传递给 SQL 模板

    如果我将 BigQueryOperator 与 SQL 模板结合使用 如何将参数传递给 SQL File sql 查询 sql SELECT FROM dataset task instance variable for execution
  • 如何一次从 3 个给定点绘制连续曲线

    我正在尝试在 Flash 中绘制一条连续的曲线 方法有很多 但到目前为止我发现没有一个完全符合我的要求 首先 我想使用 flash 图形 api 的 curveTo 方法 我不想每个曲线段对 lineTo 进行数百次调用来模拟曲线 根据我的
  • 使 Django forms.DateField 显示使用本地日期格式

    我正在尝试找到一种简单的方法来构建以澳大利亚格式 dd mm yyyy 显示日期的表单 这是我能找到的唯一方法 看来应该有更好的解决方案 注意事项 创建了一个新的小部件 以 dd mm yyyy 格式呈现日期值 创建了新的日期字段 将定位日
  • 如何在 Laravel 4 路由组上应用多个过滤器?

    Laravel 4 中是否可以在组路由上添加多个过滤器 对于以 API 为中心的应用程序 我有 2 种身份验证方法 一种具有标准身份验证 针对网站过滤器 auth 一种具有令牌 针对移动应用程序过滤器 auth token 理想情况下我希望
  • 具有多个存储的 CoreData:配置问题

    我有一个 iOS 项目 其中有一个大型预加载数据库和一个小型用户数据库 都是 CoreData SQLite 存储 前面的问题建议使用配置来控制哪些实体与哪个商店一起使用 我很难让它发挥作用 这就是我一直在尝试的 NSManagedObje
  • 如何覆盖图像元数据?

    如果 key val 已存在于 CGImageDestination 的原始图像元数据中 我似乎无法将图像元数据正确写入图像 如果它们的键 值不存在于原始元数据中 它就可以正常工作 几乎就像原始图像中的图像元数据属性优先于修改一样 这是我不
  • 如何在ggplot2中使用geom_sf获得多边形边界

    这个问题之前已经被问过一个旧线程 但接受的答案目前在当前版本的 ggplot2 中不再有效 这是一个最小的例子 library ggplot2 library rnaturalearth world ne countries scale m
  • 如何创建一个缓存对象的类?

    我对 C 中的泛型很陌生 我正在尝试创建一个存储 程序的其他部分可以请求模型对象 这个想法是 如果我的缓存类有该对象 它会检查其日期 如果该对象不早于 10 分钟 则返回该日期 如果它早于 10 分钟 它会从在线服务器下载更新的模型 如果它
  • 理查森-露西算法如何工作?代码示例?

    我试图弄清楚反卷积是如何工作的 我理解它背后的想法 但我想了解一些实现它的实际算法 这些算法将模糊图像及其点样本函数 模糊内核 作为输入 并生成潜在图像作为输出 到目前为止我发现理查森 露西算法 其中数学似乎并不那么困难 但我无法弄清楚实际
  • 为什么我无法重写接口方法?

    假设我有一个如下界面 interface CardHolder IEnumerable