【发布时间】:2017-06-05 05:10:34
【问题描述】:
来自 C# 5.0 规范
3.6 签名和重载
...
运算符的签名由运算符的名称和每个形式参数的类型组成,在 从左到右排序。操作员的签名专门做 不包括结果类型。
...
10.10 运算符
...
像其他成员一样,在基类中声明的运算符是继承的 通过派生类。因为操作符声明总是需要 声明运算符参与的类或结构 在操作员的签名中,它是不可能的 在派生类中声明的运算符以隐藏在派生类中声明的运算符 基类。因此,永远不需要新的修饰符,因此 绝对不允许,在操作符声明中。
- 第一段没有说“其中的类或结构 运营商被声明”是运营商签名的一部分。所以 什么是“操作员声明总是需要类或 声明操作员参与的结构 第二段中的操作员签名是什么意思?
- 是否适用于操作员的签名,但不适用于方法的签名? 签名?
- 如果“在派生类中声明的运算符是不可能的 隐藏在基类中声明的运算符”,是否有可能 方法以及为什么?
谢谢。
【问题讨论】:
-
不清楚...由于您无法匹配派生类中基类运算符的签名,您希望如何隐藏?
-
@Alexei:是什么阻止你在两个班级都写
static public bool operator<(Base b, Derived d)? -
@BenVoigt 好点...刚试过 - 不抱怨隐藏,但在通话时变得模棱两可。 (不知道为什么有人会出于明智的意图这样做)
-
@BenVoigt、Tim 和 Alexei:出于好奇,为什么这个问题很重要,为什么要逐字阅读规范?我的意思是我们不能说规范可能是错误的吗?我问这个问题是因为为什么要如此仔细地阅读规范?
-
@CodingYoshi C# 通常旨在防止可能令人困惑的事情(例如不允许在嵌套范围内使用相同的变量) - 因此了解如何/为什么编写特定规则是个好主意。 IE。如果尝试创建自定义数字类型,对运算符重载规则缺乏很好的理解,可能会导致相当多的痛苦......(顺便说一句,如果与运算符重载相关的 C# 规范的一部分是错误的,我会感到非常惊讶。到现在经历了7个版本,确实也可能是错的)
标签: c#