哪个操作数调用重载函数

时间:2013-09-23 20:40:58

标签: c#

在C ++中,第一个操作数(对象)将调用重载函数。在c#中会做同样的事情?哪个操作数?因为在C#中我们将两个操作数发送到函数,例如+,如下所示:

public static Rectangle operator + (Rectangle x,Rectangle y)

第二个问题。如果我们想为两种不同的类型执行此操作(从不同的类类型中考虑object1object2)我们应该在哪里定义函数?

3 个答案:

答案 0 :(得分:3)

在您的示例中,重载的运算符为static(实际上,所有重载的运算符都在C#中),因此,与实例方法object.Equals不同,操作数都不是调用方法的“一”在x.Equals(y)中,您可以指出x是您正在调用该方法的那个。相反,它就像你做了这个静态方法调用:

Rectangle.Add(x, y);

如果您有两种不同的类型,则可以在任一类中定义运算符,但不能在两个类中定义。

答案 1 :(得分:3)

  

在C ++中,第一个操作数(对象)将调用重载函数。在c#中会做同样的事情?

这令人困惑,但我想我明白你在问什么。你是说在C ++中,当你说

a + b

你真的得到了

a.operator+(b)

?也就是说,左手操作数是C ++中调用的接收者,它在C#中是否相同?

没有。这不是C#的工作方式。运算符始终是 static ;他们没有接收器。两个操作数都作为参数传递。

  

第二个问题。

如果您将来有两个问题请发两个问题。在同一个问题中发布两个问题令人困惑。

  

如果我们想为两种不同的类型执行此操作(考虑来自不同类类型的object1和object2)我们应该在哪里定义函数?

它必须属于两个类中的一个,但不能同时属于两个类。你选择哪一个取决于你。

顺便说一句,我将在本周三讨论我的博客上++运算符的C ++和C#重载之间的差异,所以如果这个主题让你感兴趣,请查看。

答案 2 :(得分:0)

由于我理解C#的操作数结构,因此操作数都不会调用运算符。运算符是一个函数,在您的情况下采用矩形参数x和y