我如何重写基类的 == 运算符,以便调用重写

2024-01-10

使用如下代码

public class Task
{
  string Name;
  public static bool operator ==(Task t1, Task t2)
  { return t1.Name = t2.Name && t1.GetType() == t2.GetType(); }
}
public class TaskA : Task
{
   int aThing;
   public static bool operator ==(TaskA t1, TaskA t2)
   { 
      return (Task)t1 == (Task)t2 && t1.GetType() == t2.GetType()
          && t1.aThing == t2.aThing; }
}
public class TaskB : Task  //more of the same

class Stuffin
{
   List<Task> Tasks;

   void CheckIt()
   {
      bool theSame = Tasks[0] == Tasks[1];
   }

我试图确保派生运算符 (TaskA.==) 被调用。

尝试该技术时出现编译错误here https://stackoverflow.com/questions/2143394/operator-in-derived-class-never-gets-called.

我认为如果操作符不是静态的,我就能让它正常工作,因为我可以重写基类的操作符。那可能吗?

一旦我明白了,我将如何比较基本属性(我认为转换为任务类型 [(Task)t1 == (Task)t2] 不起作用)?


你不能。运营商不是被覆盖, 他们是超载。这意味着要使用的实现完全在编译时决定。

一件事你cando 是覆盖Equals in Task并从调用它==,然后覆盖它again in TaskA。这也使得“基本属性”检查变得容易 - 只需调用base.Equals from TaskA.Equals.

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

我如何重写基类的 == 运算符,以便调用重写 的相关文章

  • 进程何时获得 SIGABRT(信号 6)?

    C 中进程获得 SIGABRT 的场景有哪些 该信号是否始终来自进程内部 或者该信号可以从一个进程发送到另一个进程吗 有没有办法识别哪个进程正在发送该信号 abort 向调用进程发送SIGABRT信号 就是这样abort 基本上有效 abo
  • 我的线程图像生成应用程序如何将其数据传输到 GUI?

    Mandelbrot 生成器的缓慢多精度实现 线程化 使用 POSIX 线程 Gtk 图形用户界面 我有点失落了 这是我第一次尝试编写线程程序 我实际上并没有尝试转换它的单线程版本 只是尝试实现基本框架 到目前为止它是如何工作的简要描述 M
  • 向 ExpandoObject 添加方法时,“关键字 'this' 在静态属性、静态方法或静态字段初始值设定项中无效”

    我尝试向 ExpandoObject 添加一个动态方法 该方法将返回属性 动态添加 给它 但它总是给我错误 我在这里做错了什么吗 using System using System Collections Generic using Sys
  • 32 位应用程序的特征最大矩阵大小

    所以 我正在寻找Eigen http eigen tuxfamily org index php title Main Page当我尝试声明大于 10000x10000 的矩阵时 包崩溃 我需要声明一个像这样的矩阵 可靠地大约有 13000
  • C# 中的接口继承

    我试图解决我在编写应用程序时遇到的相当大的 对我来说 问题 请看这个 为了简单起见 我将尝试缩短代码 我有一个名为的根接口IRepository
  • Clang 编译器 (x86):80 位长双精度

    我正在尝试在 x86 Windows 平台上使用本机 80 位长双精度 海湾合作委员会选项 mlong double 80 https gcc gnu org onlinedocs gcc x86 Options html似乎不适用于 cl
  • 暂停下载线程

    我正在用 C 编写一个非常简单的批量下载程序 该程序读取要下载的 URL 的 txt 文件 我已经设置了一个全局线程和委托来更新 GUI 按下 开始 按钮即可创建并启动该线程 我想要做的是有一个 暂停 按钮 使我能够暂停下载 直到点击 恢复
  • 如何从 C# 控制器重定向到外部 url

    我使用 C 控制器作为网络服务 在其中我想将用户重定向到外部网址 我该怎么做 Tried System Web HttpContext Current Response Redirect 但没有成功 使用控制器的重定向 http msdn
  • 检查算术运算中的溢出情况[重复]

    这个问题在这里已经有答案了 可能的重复 检测 C C 中整数溢出的最佳方法 https stackoverflow com questions 199333 best way to detect integer overflow in c
  • 将数据打印到文件

    我已经超载了 lt lt 运算符 使其写入文件并写入控制台 我已经为同一个函数创建了 8 个线程 并且我想输出 hello hi 如果我在无限循环中运行这个线程例程 文件中的o p是 hello hi hello hi hello hi e
  • 将构建日期放入“关于”框中

    我有一个带有 关于 框的 C WinForms 应用程序 我使用以下方法将版本号放入 关于 框中 FileVersionInfo GetVersionInfo Assembly GetExecutingAssembly Location F
  • 当“int”处于最大值并使用 postfix ++ 进行测试时,代码定义良好吗?

    示例 未定义行为的一个示例是整数溢出的行为 C11dr 3 4 3 3 int溢出是未定义的行为 但这是否适用于存在循环的以下内容 并且不使用现在超出范围的副作用i 特别是 这是否后缀增量规格帮助 结果的值计算在副作用之前排序 更新操作数的
  • 获取 2 个数据集 c# 中的差异

    我正在编写一个简短的算法 它必须比较两个数据集 以便可以进一步处理两者之间的差异 我尝试通过合并这两个数据集并将结果更改放入新的数据集来实现此目标 我的方法如下所示 private DataSet ComputateDiff DataSet
  • 是否可以有一个 out ParameterExpression?

    我想定义一个 Lambda 表达式out范围 有可能做到吗 下面是我尝试过的 C Net 4 0 控制台应用程序的代码片段 正如您在 procedure25 中看到的 我可以使用 lambda 表达式来定义具有输出参数的委托 但是 当我想使
  • 当前的 x86 架构是否支持非临时加载(来自“正常”内存)?

    我知道有关此主题的多个问题 但是 我没有看到任何明确的答案或任何基准测量 因此 我创建了一个处理两个整数数组的简单程序 第一个数组a非常大 64 MB 第二个数组b很小 无法放入 L1 缓存 程序迭代a并将其元素添加到相应的元素中b在模块化
  • 为什么拆箱枚举会产生奇怪的结果?

    考虑以下 Object box 5 int int int box int 5 int nullableInt box as int nullableInt 5 StringComparison enum StringComparison
  • 剪贴板在 .NET 3.5 和 4 中的行为有所不同,但为什么呢?

    我们最近将一个非常大的项目从 NET Framework 3 5 升级到 4 最初一切似乎都工作正常 但现在复制粘贴操作开始出现错误 我已经成功制作了一个小型的可复制应用程序 它显示了 NET 3 5 和 4 中的不同行为 我还找到了一种解
  • 什么是 __declspec 以及何时需要使用它?

    我见过这样的例子 declspec在我正在阅读的代码中 它是什么 我什么时候需要使用这个构造 这是 Microsoft 对 C 语言的特定扩展 它允许您使用存储类信息来赋予类型或函数属性 文档 declspec C https learn
  • Googletest:如何异步运行测试?

    考虑到一个包含数千个测试的大型项目 其中一些测试需要几分钟才能完成 如果按顺序执行 整套测试需要一个多小时才能完成 通过并行执行测试可以减少测试时间 据我所知 没有办法直接从 googletest mock 做到这一点 就像 async选项
  • 匿名结构体作为返回类型

    下面的代码编译得很好VC 19 00 23506 http rextester com GMUP11493 标志 Wall WX Za 与VC 19 10 25109 0 标志 Wall WX Za permissive 这可以在以下位置检

随机推荐

  • NUnit.Mocks 文档在哪里? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 NUnit 的模拟库 NUnit Mocks 的文档在哪里 我在他们中找不到任何东西官方文档 http
  • 一次读取 1 个字节的二进制文件

    我试图一次读取一个 C 语言的二进制文件 在互联网上搜索了几个小时后 我仍然无法让它检索除垃圾和 或段错误之外的任何内容 基本上 二进制文件采用列表格式 长度为 256 个项目 每个项目为 1 个字节 0 到 255 之间的无符号整数 我正
  • 修改int为float(mysql)

    我正在尝试将 MySQL 中的数据类型从 INT 更改为 FLOAT 如下所示 ALTER TABLE user MODIFY rate float 5 NOT NULL 但当前数据已被删除 有什么方法可以使用 SQL 将数据从 INT 转
  • 如何从指令调用控制器函数?

    如何从指令调用控制器函数 或者如何从控制器访问指令 ng model 例如 我使用 Angular ui 引导时间组件 当时间改变时 我需要通知控制器中的调用函数 我认为总的来说 这是组件之间双向通信的典型用例 appControllers
  • 持久化 MPMediaItemCollection 对象的方法? (选自 iPod)

    我正在制作一个应用程序 用户可以在其中选择设置选项卡中的歌曲 并根据需要在不同的视图中播放该歌曲 我希望这样 如果用户要关闭应用程序并再次重新打开它 则可以存储该项目 我设法允许用户选择并存储一首歌曲 IBAction showMediaP
  • 使用代码隐藏文件中的 VB.Net 编码填充 ASP.Net DropDownList

    我们在 ASP Net VB Net Web 表单的标记中有一个 DropDownList 我们希望使用数据集设计器创建的数据集中的数据填充 DropDownList 但我们在代码隐藏文件中使用的编码无法使用 FindControl 找到
  • VS2015 VSIX 系统内存不足异常

    我创建了一个新的 VSIX 项目并添加了一个新项目 gt 可扩展性 gt 自定义工具窗口 然后我尝试构建 但出现错误 1 gt Build started Project JSBQ Configuration Debug Any CPU 1
  • Ember数据删除失败,如何回滚

    如果我调用 destroyRecord 并且它在服务器上失败 它也会从本地存储和 UI 中消失 如果删除失败 我需要以某种方式 回滚 我尝试过这样的事情 item destroyRecord then function Notify suc
  • 从命令行构建解决方案

    我正在尝试使用命令行从 cmd 文件构建许多解决方案来处理整个构建 这是构建解决方案的行 for f i in CFG bld lst do set OUT i Release REBUILD call out C Program File
  • Web 应用程序中用于 Retina 显示的启动图像?

    有人知道如何让iOS在使用时显示更高分辨率的启动图像吗 目前 我只能使用 460x380 的图像 在 iPhone 4 的高 dpi 显示屏上显示时 该图像显然看起来很糟糕 我尝试了 2x 技巧 但似乎不起作用 有什么想法或解决方法吗 我从
  • jquery 中的 Twig 无法读取 jquery 变量

    我正在尝试使用 jQuery post 但在使用 twig 语法的路径部分有问题 这是代码 messageSender click function e e preventDefault var threadId this find a d
  • cefSharp ChromiumWebBrowser 大小与页面内容的关系

    您知道如何使 ChromiumBrowser 打开时浏览器大小适合内容吗 现在这个 xaml 位于窗口主体中 当有人单击 MyTextBox 的文本时 ChromiumBrowser 将打开以显示更多信息 Edit 如果没有固定的宽度和高度
  • 在 Jtable 中添加 JCombobox 并在 Swing java 中获取该行和列

    我有一个 Jtable 其中我像这样添加了 JComobox TableColumn sportColumn jTable1 getColumnModel getColumn 2 comboBox new JComboBox comboBo
  • 仅元素属性发生变化的 ItemsSource 和集合

    我对 ComboBox 没有反映其 ItemsSource 绑定到的集合的属性变化感到悲伤 有一个树由包含设置对象的类别对象的可观察类别集合组成 某些设置定义其他设置允许的值域的表示名称 它们分布在多个类别中 但使用 LINQ 的一点魔法会
  • 打印哈希码代替数组元素[重复]

    这个问题在这里已经有答案了 我创建了一个程序 其中有一个名为 Student 的新类 它设置和获取不同的变量 例如姓名 GPA 是否注册以及何时注册 这是一个字符串 它的目的是 问题是 当我尝试将信息存储到数组和 或数组列表中并打印它时 我
  • RSVP - 用承诺处理超时

    我正在使用 ember js 和 RSVP 据我所知 没有任何东西可以处理异步调用的超时 我的想法是使用装饰器模式包装解析处理程序 将解析处理程序包装在某些代码中 这些代码将计时调用并在发生超时时调用拒绝 这听起来是个好主意吗 还是有一些内
  • Android:意图的 setFlags 和 addFlags 之间有什么区别

    setFlags 和 addFlags 对于意图有什么区别 请任何人解释一下 帮助表示赞赏 当你使用setFlags您正在替换旧标志 当您使用addFlags您正在附加新标志 请记住 标志只是一个整数 它是 2 的幂 在二进制中 标志如下所
  • 当委托传递到另一个 AppDomain 时,是否可以将它们编组为代理?

    不知何故 我假设传递给另一个 AppDomain 的委托将变成代理 就好像它是派生自的对象一样MarshalByRefObject 不幸的是 他们似乎没有 假设我的代码中有一个类MyClass像这样 Serializable public
  • Git 子模块与包管理器的私有源

    使用本地包管理器 例如 pip 或 npm 比使用 git 子模块有什么优势 git is a 发展工具 您在开发期间使用它 但在部署期间不使用它 pip是一个部署工具 在开发过程中 您使用它来安装必要的库 在部署期间 您的用户使用它来安装
  • 我如何重写基类的 == 运算符,以便调用重写

    使用如下代码 public class Task string Name public static bool operator Task t1 Task t2 return t1 Name t2 Name t1 GetType t2 Ge