Делегаты с похожей, но разной сигнатурой - C#
Формулировка задачи:
Извиняюсь за глупые вопросы, но помогите пожалуйста, понять суть происходящего.
Возможно ли сделать что-то вроде такого и как (бьюсь второй день, но либо генерики не понимаю, либо типизацию, либо все сразу)
Хочу сделать универсальный делегат наподобие:
Потом несколько конкретных представителей этого делегата:
И наконец универсальный метод вроде
Почему компилятор не позволяет мне этого сделать?
Я ведь кормлю им int и strings соответственно, возвращают они тоже то, что нужно.
public delegate T Add<T> (T right, T left);
Add<int> addInt = (right, left) => { return right + left; }; Add<string> addString = (right, left) => { return right + left; };
T addSomething<T>(T one, T two) { Type type = typeof(T); if (type.Equals(typeof(Int32))) { return addInt( one, two); } if (type.Equals(typeof(String))) { return addString (one, two); } }
Решение задачи: «Делегаты с похожей, но разной сигнатурой»
textual
Листинг программы
class Matrix<T> { public T[,] Items { get; set; } public int Width { get { return Items.GetLength(0); } } public int Height { get { return Items.GetLength(1); } } } static class MatrixExtender { public static Matrix<int> Add(this Matrix<int> matrix, Matrix<int> other) { var res = new Matrix<int>(); res.Items = (int[,])matrix.Items.Clone(); for (int i = 0; i < res.Width;i++ ) for (int j = 0; j < res.Height; j++) res.Items[i, j] += other.Items[i, j]; return res; } public static Matrix<float> Add(this Matrix<float> matrix, Matrix<float> other) { var res = new Matrix<float>(); res.Items = (float[,])matrix.Items.Clone(); for (int i = 0; i < res.Width; i++) for (int j = 0; j < res.Height; j++) res.Items[i, j] += other.Items[i, j]; return res; } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д