在C ++中,第一个操作数(对象)将调用重载函数。在c#中会做同样的事情?哪个操作数?因为在C#中我们将两个操作数发送到函数,例如+
,如下所示:
public static Rectangle operator + (Rectangle x,Rectangle y)
第二个问题。如果我们想为两种不同的类型执行此操作(从不同的类类型中考虑object1
和object2
)我们应该在哪里定义函数?
答案 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