2015-02-11 35 views
1

所以我从来没有看到这一点,我想弄清楚它做什么:方法定义中的operator +做什么?

public static MyFunction operator +(MyObject first, MyObject second) 
+1

这是一个运算符重载:https://msdn.microsoft.com/en-us/library/aa288467%28v=vs.71%29.aspx – itsme86 2015-02-11 21:31:01

+1

它是加法运算符。它允许你“添加”两个'MyObjects'。 – 2015-02-11 21:31:21

+0

[C#中的运算符重载]的可能的重复(http://stackoverflow.com/questions/7899339/operator-overloading-in-c-sharp) – Codeman 2015-02-11 21:35:21

回答

8

它被称为operator overload

它允许您使用原始运算符(如+,-,%等)应用于您定义的对象。

一个可能有用的例子是,如果您有两个列表,并且您希望将其中一个添加到另一个列表的末尾。 MSDN使用的另一个例子是如果你有两个向量的复数。

现在通常更恰当的是定义一个方法,该方法接受要应用的操作数的数量并使用该方法,而不是通过覆盖使用的操作符来使代码更难以读取和调试为其他事情。

tl; dr;使用方法而不是运算符重载,除非你有一个很好的理由。

+0

'vector1 + vector2'>'Vector.Add(vector1,vector2)' – 2016-04-20 21:49:48

+0

@EmperorAiman一般情况下,除非你正在编写一些真正的核心框架东西IMO,否则应该避免运算符重载。做你想做的,但它只是一种方法,如果你只是使用方法签名,你可以避免混淆 – Codeman 2016-04-20 23:13:42

8

它覆盖+操作该类,让这样的代码来编译和运行:

MyObject op1 = new MyObject(); 
MyObject op2 = new MyObject(); 
MyFunction result = op1 + op2; 

执行+操作会调用您发布的方法。更多关于操作符重载,见MSDN

相关问题