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

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(使用前将#替换为@)

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

  • WPF DataGrid 多选

    我读过几篇关于这个主题的文章 但很多都是来自 VS 或框架的早期版本 我想做的是从 dataGrid 中选择多行并将这些行返回到绑定的可观察集合中 我尝试创建一个属性 类型 并将其添加到可观察集合中 它适用于单个记录 但代码永远不会触发多个
  • 没有特殊字符的密码验证器

    我是 RegEx 的新手 已经进行了大量搜索 但没有找到任何具体内容 我正在编写一个验证密码字符串的正则表达式 可接受的字符串必须至少具有 4 种字符类型中的 3 种 数字 小写字母 大写字母 特殊字符 我对包含有一个想法 也就是说 如果这
  • 类型中的属性名称必须是唯一的

    我正在使用 Entity Framework 5 并且有以下实体 public class User public Int32 Id get set public String Username get set public virtual
  • 如何在 Cassandra 中存储无符号整数?

    我通过 Datastax 驱动程序在 Cassandra 中存储一些数据 并且需要存储无符号 16 位和 32 位整数 对于无符号 16 位整数 我可以轻松地将它们存储为有符号 32 位整数 并根据需要进行转换 然而 对于无符号 64 位整
  • std::vector 与 std::stack

    有什么区别std vector and std stack 显然 向量可以删除集合中的项目 尽管比列表慢得多 而堆栈被构建为仅后进先出的集合 然而 堆栈对于最终物品操作是否更快 它是链表还是动态重新分配的数组 我找不到关于堆栈的太多信息 但
  • 如何在 C# 中打开 Internet Explorer 属性窗口

    我正在开发一个 Windows 应用程序 我必须向用户提供一种通过打开 IE 设置窗口来更改代理设置的方法 Google Chrome 使用相同的方法 当您尝试更改 Chrome 中的代理设置时 它将打开 Internet Explorer
  • 如何从本机 C(++) DLL 调用 .NET (C#) 代码?

    我有一个 C app exe 和一个 C my dll my dll NET 项目链接到本机 C DLL mynat dll 外部 C DLL 接口 并且从 C 调用 C DLL 可以正常工作 通过使用 DllImport mynat dl
  • 如何在 C++ 中标记字符串?

    Java有一个方便的分割方法 String str The quick brown fox String results str split 在 C 中是否有一种简单的方法可以做到这一点 The 增强分词器 http www boost o
  • 用于 FTP 的文件系统观察器

    我怎样才能实现FileSystemWatcherFTP 位置 在 C 中 这个想法是 每当 FTP 位置添加任何内容时 我都希望将其复制到我的本地计算机 任何想法都会有所帮助 这是我之前问题的后续使用 NET 进行选择性 FTP 下载 ht
  • ASP.NET Core 3.1登录后如何获取用户信息

    我试图在登录 ASP NET Core 3 1 后获取用户信息 如姓名 电子邮件 id 等信息 这是我在登录操作中的代码 var claims new List
  • 在 Unity 中实现 Fur with Shells 技术

    我正在尝试在 Unity 中实现皮毛贝壳技术 http developer download nvidia com SDK 10 5 direct3d Source Fur doc FurShellsAndFins pdf Fins 技术被
  • C# xml序列化必填字段

    我需要将一些字段标记为需要写入 XML 文件 但没有成功 我有一个包含约 30 个属性的配置类 这就是为什么我不能像这样封装所有属性 public string SomeProp get return someProp set if som
  • 实例化类时重写虚拟方法

    我有一个带有一些虚函数的类 让我们假设这是其中之一 public class AClassWhatever protected virtual string DoAThingToAString string inputString retu
  • C 编程:带有数组的函数

    我正在尝试编写一个函数 该函数查找行为 4 列为 4 的二维数组中的最大值 其中二维数组填充有用户输入 我知道我的主要错误是函数中的数组 但我不确定它是什么 如果有人能够找到我出错的地方而不是编写新代码 我将不胜感激 除非我刚去南方 我的尝
  • LINQ:使用 INNER JOIN、Group 和 SUM

    我正在尝试使用 LINQ 执行以下 SQL 最接近的是执行交叉联接和总和计算 我知道必须有更好的方法来编写它 所以我向堆栈团队寻求帮助 SELECT T1 Column1 T1 Column2 SUM T3 Column1 AS Amoun
  • 相当于Linux中的导入库

    在 Windows C 中 当您想要链接 DLL 时 您必须提供导入库 但是在 GNU 构建系统中 当您想要链接 so 文件 相当于 dll 时 您就不需要链接 为什么是这样 是否有等效的 Windows 导入库 注意 我不会谈论在 Win
  • C++ 中的 include 和 using 命名空间

    用于使用cout 我需要指定两者 include
  • C# 使用“?” if else 语句设置值这叫什么

    嘿 我刚刚看到以下声明 return name null name NA 我只是想知道这在 NET 中叫什么 是吗 代表即然后执行此操作 这是一个俗称的 条件运算符 三元运算符 http en wikipedia org wiki Tern
  • 在OpenGL中,我可以在坐标(5, 5)处精确地绘制一个像素吗?

    我所说的 5 5 正是指第五行第五列 我发现使用屏幕坐标来绘制东西非常困难 OpenGL 中的所有坐标都是相对的 通常范围从 1 0 到 1 0 为什么阻止程序员使用屏幕坐标 窗口坐标如此严重 最简单的方法可能是通过以下方式设置投影以匹配渲
  • 现代编译器是否优化乘以 1 和 -1

    如果我写 template

随机推荐

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

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