Incluso sin los genéricos, puede tener diferentes tipos de delegado que son idénticos en las firmas y tipos de devolución. Por ejemplo:
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);
}
En el ejemplo anterior, los dos tipos no genéricos tienen la misma firma y el tipo de devolución. (Y en realidad también lo mismo que Predicate<string>
y Func<string, bool>
). Pero como traté de indicar, el "significado" de los dos es diferente.
Esto es algo así como si hago dos clases, class Car { string Color; decimal Price; }
y class Person { string FullName; decimal BodyMassIndex; }
, a continuación, sólo porque ambos celebrar una string
y una decimal
, eso no quiere decir que sean "el mismo" tipo.
@Sean - la diferencia radica en la intención de comunicación. Cuando uso un predicado, me refiero a usar el bloque de código como una 'prueba' y tomar medidas basadas en el resultado de la prueba. Cuando uso un 'Func', solo necesito ordenar una función que toma un parámetro y devuelve un bool. –
Gishu
posible duplicado de [¿Por qué Func en lugar de Predicado ?] (Http://stackoverflow.com/questions/665494/why-funct-bool-instead-of-predicatet) –
abatishchev