Вы не можете добавить перегрузку оператора к стороннему типу - на самом деле любой класс, который вы не можете редактировать.Перегрузки оператора должны быть определены внутри их типа, с которым они должны работать (хотя бы одно из аргументов).Так как это не ваш тип, вы не можете его редактировать, и struct
s не могут быть расширены.
Но, даже если это был не sealed class
, вам придется подкласс,что разрушило бы точку, потому что они должны были бы использовать подкласс, а не суперкласс с оператором, поскольку вы не можете определить перегрузку оператора между базовыми типами ...
public class A
{
public int X { get; set; }
}
public class B : A
{
public static A operator + (A first, A second)
{
// this won't compile because either first or second must be type B...
}
}
Вы можетеполностью выполнить перегрузку между экземплярами подкласса, но тогда вам придется использовать ваш новый подкласс везде, где вы хотите выполнить перегрузку, вместо исходного суперкласса, что будет выглядеть неуклюже и, вероятно, не так, как вы хотите:
public class A
{
public int X { get; set; }
}
public class B : A
{
public static B operator + (B first, B second)
{
// You could do this, but then you'd have to use the subclass B everywhere you wanted to
// do this instead of the original class A, which may be undesirable...
}
}