Il existe des interfaces pour certains des opérations sur les types de nombre, comme l' IComparable<T>
, IConvertible
et IEquatable<T>
interfaces. Vous pouvez spécifier que, pour obtenir une fonctionnalité spécifique:
public class MaxFinder<T> where T : IComparable<T> {
public T FindMax(IEnumerable<T> items) {
T result = default(T);
bool first = true;
foreach (T item in items) {
if (first) {
result = item;
first = false;
} else {
if (item.CompareTo(result) > 0) {
result = item;
}
}
}
return result;
}
}
Vous pouvez utiliser les délégués à l'expansion d'une classe avec le type d'opérations spécifiques:
public class Adder<T> {
public delegate T AddDelegate(T item1, T item2);
public T AddAll(IEnumerable<T> items, AddDelegate add) {
T result = default(T);
foreach (T item in items) {
result = add(result, item);
}
return result;
}
}
Utilisation:
Adder<int> adder = new Adder<int>();
int[] list = { 1, 2, 3 };
int sum = adder.AddAll(list, delegate(int x, int y) { return x + y; });
Vous pouvez également stocker des délégués de la classe, et les différentes méthodes de fabrique qui met en place des délégués pour un type de données spécifique. De cette façon, le type de code spécifique est seulement dans les méthodes de fabrique.