Перегрузка операторов в обобщенном классе. Сложение, вычитание типов T - C#
Формулировка задачи:
Потихоньку изучаю C#. Тут решил написать обобщенный класс, который тип T представляет из себя любой тип, связанный с числами. Можно ли его как-нибудь до этого ограничить.
Проблема в том, что в моем обобщенном классе есть перегрузка операторов +, - и тд. Соответственно внутри методов перегрузки, мне нужно суммировать, вычитать объекты типа T, что компилятор не дает сделать, так как не знает о T нихрена...ох как же я привык к C++...
Как такое реализовывается?
Решение задачи: «Перегрузка операторов в обобщенном классе. Сложение, вычитание типов T»
textual
Листинг программы
class Number<T> where T : struct { private T _value; private static DynamicMethod _add = GenAdd(); public Number(T value) { _value = value; } private static DynamicMethod GenAdd() { var method = new DynamicMethod("__Add", typeof(T), new[] { typeof(T), typeof(T) }); var gen = method.GetILGenerator(); gen.Emit(OpCodes.Ldarg_0); gen.Emit(OpCodes.Ldarg_1); gen.Emit(OpCodes.Add); gen.Emit(OpCodes.Ret); return method; } public static Number<T> operator+(Number<T> left, Number<T> right) { return new Number<T>((T)_add.Invoke(null, new object[] { left._value, right._value })); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д