Дан класс Clock, который хранит количество часов:
class Clock { public int Hours { get; set; } }
В программе мы можем из числа получить количество часов и, наоборот, из количество часов значение типа int:
Clock clock = new Clock(); int val = 34; clock.Hours = val % 24; val = clock.Hours;
Добавьте в класс Clock оператор для неявного преобразования от типа int к типу Clock, и оператор явного преобразования от типа Clock к типу int.
Возможно определение класса:
class Clock { public int Hours { get; set; } public static implicit operator Clock(int x) { return new Clock { Hours = x % 24 }; } public static explicit operator int(Clock clock) { return clock.Hours; } }
Применение:
Clock clock = new Clock { Hours = 15 }; int x = (int)clock; Console.WriteLine(x); // 15 Clock clock2 = 13; Console.WriteLine(clock2.Hours); clock2 = 34; Console.WriteLine(clock2.Hours);
Даны следующие классы:
class Celcius { public double Gradus { get; set; } } class Fahrenheit { public double Gradus { get; set; } }
Класс Celcius представляет градусник по Цельсию, а Fahrenheit - градусник по Фаренгейту.
Определите операторы преобразования от типа Celcius и наоборот.
Преобразование температуры по шкале Фаренгейта (Tf) в температуру по шкале Цельсия (Tc): Tc = 5/9 * (Tf - 32).
Преобразование температуры по шкале Цельсия в температуру по шкале Фаренгейта: Tf = 9/5 * Tc + 32.
Возможное решение:
class Celcius { public double Gradus { get; set; } public static implicit operator Fahrenheit(Celcius celcius) { return new Fahrenheit { Gradus = 9.0 / 5 * celcius.Gradus + 32 }; } public static implicit operator Celcius(Fahrenheit fahrenheit) { return new Celcius { Gradus = 5.0 / 9 * (fahrenheit.Gradus - 32) }; } } class Fahrenheit { public double Gradus { get; set; } }
Применение:
Celcius celcius = new Celcius { Gradus = 25 }; Fahrenheit fahrenheit = celcius; Console.WriteLine(fahrenheit.Gradus); celcius = fahrenheit; Console.WriteLine(celcius.Gradus);
Даны следующие классы:
class Dollar { public decimal Sum { get; set; } } class Euro { public decimal Sum { get; set; } }
Класс Dollar представляет сумму в долларах, а Euro - сумму в евро.
Определите операторы преобразования от типа Dollar в Euro и наоборот. Допустим, 1 евро стоит 1,14 долларов. При этом один оператор должен подразумевать явное, и один - неявное преобразование.
Возможное решение:
class Dollar { public decimal Sum { get; set; } } class Euro { public decimal Sum { get; set; } public static explicit operator Dollar(Euro euro) { return new Dollar { Sum = euro.Sum * 1.14M }; } public static implicit operator Euro(Dollar dollars) { return new Euro { Sum = dollars.Sum / 1.14M }; } }