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

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


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

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

8   голосов , оценка 4.25 из 5
Похожие ответы