Перегрузка операторов в обобщенном классе. Сложение, вычитание типов 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 }));
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д