Même sans médicaments génériques, vous pouvez avoir différents types de délégués qui sont identiques dans les signatures et retourne des types. Par exemple:
namespace N
{
// Represents a method that takes in a string and checks to see
// if this string has some predicate (i.e. meets some criteria)
// or not.
internal delegate bool StringPredicate(string stringToTest);
// Represents a method that takes in a string representing a
// yes/no or true/false value and returns the boolean value which
// corresponds to this string
internal delegate bool BooleanParser(string stringToConvert);
}
Dans l'exemple ci-dessus, les deux types non génériques ont la même signature et le même type de retour. (Et en fait également les mêmes que Predicate<string>
et Func<string, bool>
). Mais comme j'ai essayé d'indiquer, le "sens" des deux est différent.
Ceci est un peu comme si je fais deux classes, class Car { string Color; decimal Price; }
et class Person { string FullName; decimal BodyMassIndex; }
, puis seulement parce que les deux d'entre eux détiennent un string
et un decimal
, cela ne signifie pas qu'ils sont du type « même ».
@Sean - la différence réside dans l'intention de communiquer. Lorsque j'utilise un prédicat, je veux utiliser le bloc de code comme un «test» et prendre des mesures en fonction du résultat du test. Quand j'utilise un 'Func', j'ai juste besoin de mandater une fonction qui prend un paramètre et renvoie un booléen. –
Gishu
duplication possible de [Pourquoi Func au lieu de prédicat ?] (Http://stackoverflow.com/questions/665494/why-funct-bool-instead-of-predicatet) –
abatishchev