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