В этом совете я рассматриваю пример перезагрузки оператора для класса в С#. Это позволит производить стандартные математические операции с нестандартным классом.
Автор: tyz210
Дата: 04.06.2012 г.
Рейтинг: 0
Метки: C#, operator relod, перезагрузка оператора, класс
При разработке приложений довольно часто пишутся классы типа:class test
{
public int a;
public int b;
}
Почему классы, а не структуры? - зачастую в таких прототипах данный все-же присутствуют какие-то методы, но речь сейчас не о них, поэтому в примере кода их и нет.
Теперь перейдем собственно к задаче: скажем хочу я оформить свой код красиво и написать что-то вроде:class MainClass
и получить tC с параметром a = 2 и b = 3, вся соль в том, что JIT компилятор понятия не имеет, что делать с вашим классом. Для того, чтобы выше приведенный код работал, нам нужно перезагрузить унарный оператор итерации. Для этого добавляем в наш класс соответствующую функцию и получаем следующий вид класса:
{
public static void Main (string[] args)
{
test tA = new test (1, 2);
test tB = new test (1, 1);
test tC = tA + tB;
}} class test
{
public int a;
public int b;
public test (int _a, int _b)
{
a = _a;
b = _b;
}
public static test operator + (test t1, test t2)
{
return new test (t1.a + t1.a, t1.b + t2.b);
}
}
После этого код, приведенный в функции Main, выполнится без проблем.
Итак, еще раз полный код:class test
{
public int a;
public int b;
public test (int _a, int _b)
{
a = _a;
b = _b;
}
public static test operator + (test t1, test t2)
{
return new test (t1.a + t1.a, t1.b + t2.b);
}
}
class MainClass
{
public static void Main (string[] args)
{
test tA = new test (1, 2);
test tB = new test (1, 1);
test tC = tA + tB;
Console.WriteLine ("{0}, {1} ", tC.a, tC.b ); //
Console.ReadKey ();
}
С уважением, Сургай Владимир.