2

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

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

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

4

3 回答 3

3

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

Rectangle.Add(x, y);

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

于 2013-09-23T20:47:56.713 回答
3

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

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

a + b

你真的得到

a.operator+(b)

? 也就是说,左边的操作数是C++中调用的接收者,在C#中是一样的吗?

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

还有第二个问题。

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

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

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

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

于 2013-09-23T21:36:36.910 回答
0

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

于 2013-09-23T20:49:25.167 回答