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