为什么不能在静态类中重载运算符?

10

我有一个System.Net.IPAddress的扩展类,想要重载二进制运算符>, <, ==,但编译器告诉我不能在静态类中重载这些运算符,而我必须为其他扩展方法保留这个类。这背后是否有特定的原因呢?

谢谢。


我们曾考虑将“扩展操作符”添加到C# 4中,但它们不符合预算并被切掉了。希望我们能在假设的未来版本的语言中加入它们。 - Eric Lippert
1
@Eric: 我希望你能把它们放入“真正”的未来版本中! :) 我听说过函数式编程,但没有听说过假设性编程!那是一种新的范式吗? - Chris Dunaway
@Chris Dunaway:是的,目前它更被称为“量子编程”。 - jason
1
@Chris:我们还没有宣布C# 4以外的任何变化。如果我讨论一个我们尚未宣布并且可能不会发生的产品的可能特性,那么这将是过早的。因此,对于假设的下一个版本的C#的可能功能的任何讨论都应被视为反事实的沉思,仅供娱乐目的。 - Eric Lippert
1个回答

13

运算符必须与它们所声明类型的实例相关联。由于无法创建静态类的实例,因此定义运算符是没有意义的。

.NET中不存在“扩展运算符”。

对于您的目的,请考虑实现 IComparer<T>(涵盖<>),和/或 IEqualityComparer<T>(涵盖==),或者您可能只需使用返回0的比较方法;这取决于您是否将“排序相同”和“相等”视为相同。


你甚至让Jon Skeet删除了他的回答。 - Jan Jongboom
@Jan - 嗯,我的比你早了50秒;-p - Marc Gravell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接