C#是否支持运算符重载?

5

我曾参加一次面试,被问及一个问题:

C#支持操作符重载吗?

我知道C#支持操作符重载,但是我不知道是否支持操作符重写。这是可能的吗?


10
这是一个非常容易在谷歌上搜索到的问题。你尝试过什么? - Chris Shain
4
公平地说:这并不容易搜索。因为它不存在,你不会得到有用的结果。请查看以下搜索结果链接:https://www.google.com/search?q=Operator+Overriding+C# - Stefan Steinegger
1个回答

14
不,C#不支持运算符重载。重载这个术语是指当一个方法被子类继承并用自己的实现覆盖时所使用的。在C#中,所有运算符都是静态的,不能被重载。
重载的意思是定义另一个具有相同名称但不同签名(参数)的方法,这就是你可以对运算符进行的操作。
这在编写C#运算符时非常重要。运算符在编译时绑定。在运行时传递给运算符的有效类型根本不重要。
例如,您编写了一些比较运算符。
public static bool operator==(MyClass c1, MyClass c2)
{
  //...
}

而且有以下代码:

object myObj1 = new MyClass();
object myObj2 = new MyClass();

if (myObj1 == myObj2)
//...

因为参数是对象引用类型,所以将调用对象的运算符,而不是您自己的。


只是需要注意,我们还需要使用相同的参数编写!=运算符。 - Moshi

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