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

标签 c# operator-overloading language-design

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

谢谢。

最佳答案

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

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

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

关于c# - 为什么不能在静态类中重载运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2245866/

相关文章:

c# - 为什么完全限定的程序集名称有时需要空格?

c++ - 如何自动定义递增/递减/等运算符?

c++ - 类矩阵类的深拷贝

compiler-construction - 自然编程语言……你想看什么?

ruby - NilClass、TrueClass 和 FalseClass 的用途是什么

dart - 如何编写抽象类构造函数,以便在子类中灵活扩展

javascript - 如何将复杂的参数发送到asp.net

c# - 如何让 C# 编译器推断泛型类型?

c++ - 使用模板化适配器作为运算符重载实例的 rhs 编译错误

c# - 如何使用xmlreader读取这个xml