【问题标题】:Why can't operators be overloaded inside a static class?为什么不能在静态类中重载运算符?
【发布时间】:2010-02-11 16:25:41
【问题描述】:

我有一个 System.Net.IPAddress 的扩展类,我想重载二元运算符 >, <, == 但编译器告诉我我不能在静态类中重载这些运算符,我必须有我的其他扩展方法。这有什么特别的原因吗?

谢谢。

【问题讨论】:

  • 我们考虑在 C# 4 中添加“扩展运算符”,但它们不符合预算并被削减。希望我们能让他们进入该语言的假设未来版本。
  • @Eric:我希望你能把它们变成一个“真正的”未来版本! :) 我听说过函数式编程,但不是假设性编程!这是一种新的范式吗?
  • @Chris Dunaway:是的,现在它更广为人知的是“量子编程”。
  • @Chris:我们还没有宣布 C# 将在 C# 4 之后进行任何更改。现在讨论我们尚未宣布并且可能不会发生的产品的可能功能还为时过早。因此,任何关于假设的 C# 下一版本的可能功能未来的讨论都应被视为仅出于娱乐目的的反事实思考。

标签: c# operator-overloading language-design


【解决方案1】:

运算符必须与声明它们的类型的实例相关。由于您不能拥有静态类的实例,因此定义运算符是没有意义的。

.NET 中没有“扩展运算符”。

出于您的目的,考虑实现IComparer<T>(覆盖< 和>)和/或IEqualityComparer<T>(覆盖==,或者您可能只使用比较返回@ 987654326@;这取决于您是否认为“排序相等”和“相等”是相同的)。

【讨论】:

  • 你甚至让 Jon Skeet 删除了他的答案
  • @Jan - 好吧,我的也早了 50 秒;-p
猜你喜欢
  • 1970-01-01
  • 2015-11-13
  • 2011-01-06
  • 1970-01-01
  • 2013-07-30
  • 1970-01-01
  • 2021-07-02
  • 1970-01-01
  • 2010-11-26
相关资源
最近更新 更多