是否由C#支持运算符覆盖

时间:2012-01-09 05:59:08

标签: c# override

我接受采访时被要求回答一个问题:

  

C#支持运算符覆盖吗?

我知道支持运算符重载但我不知道覆盖运算符。有可能吗?

2 个答案:

答案 0 :(得分:13)

不,不支持运营商覆盖。当子类继承一个方法并且子类用它自己的实现覆盖它时,使用术语Overriding。操作符在C#中都是静态的,不能被覆盖。

重载意味着定义了另一个具有相同名称但具有不同签名(参数)的方法。这就是你可以对运营商做的事情。

在C#中编写运算符时,这一点非常重要。运算符在编译时受到约束。在运行时传递给操作员的有效类型根本不重要。

EG。你写了一些比较运算符

public static bool operator==(MyClass c1, MyClass c2)
{
  //...
}

并拥有以下代码:

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

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

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

答案 1 :(得分:2)

关于这个问题,这是一个非常好的article。它解释了重载和重写之间的区别,然后继续将这些定义放在C#运算符上。