Примеры перегрузки операторов
В данной рассматриваем примеры перегрузки операторов + и — в языке C#. Таким же образом можно перегрузить другие операторы, которые принимают два параметра.
Так же показываю как задать инструкцию явного преобразования типов из одного созданного класса в другой.
В коде ниже создано 2 класса: Vector и Coord. В классе Vector перегружены два бинарных оператора + и -.
В классе Coord объявлены только конструктор и два свойства X, Y, обозначающие координату.
С помощью инструкции public static explicit operator Coord(Vector v)
мы можем задать правило преобразования объекта класса Vector в объект класса Coord:
using System.IO; using System; using System.Text; class Coord { public int X {get;set;} public int Y {get;set;} public Coord(int x, int y) { this.X = x; this.Y = y; } public override string ToString() { return String.Format("Coord: X = {0}, Y = {1}", this.X, this.Y); } } class Vector { //Объвляем автосвойства, чтобы не использовать public поля public int X {get;set;} public int Y {get;set;} public Vector(int x, int y) { this.X = x; this.Y = y; } //Оператор + принимает на вход 2 параметра public static Vector operator+(Vector v1, Vector v2) { return new Vector(v1.X + v2.X, v1.Y + v2.Y); } //Оператор - принимает на вход 2 параметра public static Vector operator-(Vector v1, Vector v2) { return new Vector(v1.X - v2.X, v1.Y - v2.Y); } //Переопределение метода ToString() public override string ToString() { return String.Format("Vector: X = {0}, Y = {1}", this.X, this.Y); } //Инструкция по явному преобразованию класса Vector в класс Coord //Вместо explicit можно написать implicit, тогда преобразование можно //будет делать неявным public static explicit operator Coord(Vector v) { return new Coord(v.X, v.Y); } } class Program { static void Main() { Console.WriteLine("Start program."); Vector v1 = new Vector(10,20); Vector v2 = new Vector(15,50); Console.WriteLine(v1+v2); Console.WriteLine(v1-v2); //---------------------- Coord c1 = new Coord(100,200); Console.WriteLine(c1); //Явное преобразование Vector в Coord Coord c2 = (Coord)(v1+v2); Console.WriteLine(c2); } }
Результат работы программы: