Переопределить оператор c # - PullRequest
2 голосов
/ 17 ноября 2010

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

7 * MyClass

7 - скажем, double, а MyClass - это объект MyClass,

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

Ответы [ 2 ]

8 голосов
/ 17 ноября 2010

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

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

// 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 ...
}
2 голосов
/ 17 ноября 2010

Подходящая подпись в этом случае:

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

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

...