2010-11-17 2 views
2

Я хотел бы переопределить оператор * для моего класса. Я знаю, как обращаться * для MyClass * MyClass, но как я могу осуществить это за то, что возможность размножаться, например:Оператор переопределения C#

7 * MyClass

7 позволяет сказать, двойной и MyClass является объектом MyClass,

спасибо за помощь

ответ

8

Когда вы предоставляете оператора для своего класса, типы параметров для реализации оператора контролируют, какие ситуации вы обрабатываете.

Для иллюстрации:

// Declare which operator to overload (+), the types 
// that can be added (two Complex objects), and the 
// return type (Complex): 
public static Complex operator +(Complex c1, Complex c2) 
{ 
    return new Complex(c1.real + c2.real, c1.imaginary + c2.imaginary); 
} 

Этот метод определяет, что делать, если вы хотите добавить два Complex номера.

Если вы попытались использовать это с (скажем) double и Complex, компиляция завершится с ошибкой.

В вашем случае, вам нужно просто объявить обе версии:

public static MyClass operator *(MyClass c1, MyClass c2) 
{ 
    return ... 
} 

public static MyClass operator *(double n, MyClass c) 
{ 
    return ... 
} 
+3

Заметим также, что 7 * MyClass не то же самое, как MyClass * 7. Для этого вам понадобится две перегрузки оператора. – rein

+0

Нет никакой возможности записать вторую перегрузку оператора? – gruber

+0

Если вы хотите поддержать (двойной) * (MyClass), тогда вы это сделаете. Звучит так, как будто это не решает вашу проблему - что для вас не так? – Bevan

2

Соответствующую подпись в данном случае:

public static MyClass operator *(double a, MyClass b) 

Это означает, что она занимает double с левой стороны, MyClass вправо и возвращает MyClass.

Смежные вопросы