Перегрузка операторов в обобщенном классе. Сложение, вычитание типов T - C#

Узнай цену своей работы

Формулировка задачи:

Потихоньку изучаю C#. Тут решил написать обобщенный класс, который тип T представляет из себя любой тип, связанный с числами. Можно ли его как-нибудь до этого ограничить. Проблема в том, что в моем обобщенном классе есть перегрузка операторов +, - и тд. Соответственно внутри методов перегрузки, мне нужно суммировать, вычитать объекты типа T, что компилятор не дает сделать, так как не знает о T нихрена...ох как же я привык к C++... Как такое реализовывается?

Решение задачи: «Перегрузка операторов в обобщенном классе. Сложение, вычитание типов T»

textual
Листинг программы
  1. class Number<T> where T : struct {
  2.     private T _value;
  3.     private static DynamicMethod _add = GenAdd();
  4.  
  5.     public Number(T value) {
  6.         _value = value;
  7.     }
  8.  
  9.     private static DynamicMethod GenAdd() {
  10.         var method = new DynamicMethod("__Add", typeof(T), new[] { typeof(T), typeof(T) });
  11.         var gen = method.GetILGenerator();
  12.         gen.Emit(OpCodes.Ldarg_0);
  13.         gen.Emit(OpCodes.Ldarg_1);
  14.         gen.Emit(OpCodes.Add);
  15.         gen.Emit(OpCodes.Ret);
  16.         return method;
  17.     }
  18.  
  19.     public static Number<T> operator+(Number<T> left, Number<T> right) {
  20.         return new Number<T>((T)_add.Invoke(null, new object[] { left._value, right._value }));
  21.     }
  22. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.25 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы