【问题标题】:why few operators cannot be overloaded? [closed]为什么很少有运算符不能重载? [关闭]
【发布时间】:2013-02-26 17:23:14
【问题描述】:

我对 C# 中的运算符重载的概念有疑问。 我们可以重载少数运算符,而少数不能重载。 限制少数运算符重载是否有任何特殊原因。 如果是这样,谁能解释一下原因。

【问题讨论】:

  • 你想要哪些运算符重载你不能重载?
  • 为什么说“很少”?您实际上在谈论哪些运营商?
  • @G_S:超载?:意味着是什么意思?同上赋值,真的......你可以重载转换运算符,最终可以在赋值语句中使用......
  • G_S,试着写下“重载?: operator”的行为。纯粹为自己做,不要因为忽略极端情况而作弊。如果需要对字符串/数组进行特殊处理,至少不要忘记值和引用类型、可空类型的基本情况。不要忘记与隐式/显式转换的关系,确保涵盖返回类型......而不是阅读结果描述 - 如果它导致“地球上谁能够理解” - 这是你的答案......跨度>
  • 我试图表明,如果对行为的解释比几句话长(当你允许自定义行为时总是这种情况,包括选择正确的重载行为的规则)它需要 very 包含在语言中的充分理由。 IE。 “+”和其他数学运算符对于“代数类型”(数字、向量、矩阵...)具有非常明确的含义——因此有充分的理由允许重载。另一方面,?: 或 . 在编程之外没有定义的行为 - 允许重载的情况要弱得多。

标签: c# operator-overloading


【解决方案1】:

原因与引用在 C# 中只能具有一组行为这一事实有关。您应该搜索过Stack Overflow。这是一个解决此类问题的好网站;)

这篇文章只处理赋值运算符,但是像?:这样的运算符也处理引用,所以它们也不能重载。

【讨论】:

  • 这个问题是在 Stack Overflow 上提出的
  • Hello Ramhound,The ;) 表示一个笑话,因为我们知道我们在 Stack Overflow。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-13
  • 2014-03-22
  • 2013-07-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多