Когда вы предоставляете оператора для своего класса, типы параметров для реализации оператора контролируют, какие ситуации вы обрабатываете.
Для иллюстрации:
// 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 ...
}
Заметим также, что 7 * MyClass не то же самое, как MyClass * 7. Для этого вам понадобится две перегрузки оператора. – rein
Нет никакой возможности записать вторую перегрузку оператора? – gruber
Если вы хотите поддержать (двойной) * (MyClass), тогда вы это сделаете. Звучит так, как будто это не решает вашу проблему - что для вас не так? – Bevan