Como se ha dicho MSDN, Func<>
está a su vez predefinido Delegate
. Por primera vez, me confundí acerca de esto. Después de lo experimental, mi comprensión fue bastante más clara. Normalmente, en C#, podemos ver
Type
como un puntero a Instance
.
El mismo concepto se aplica a
Delegate
como un puntero a Method
La diferencia entre estos a las cosas es Delegate
no poseen el concepto de programación orientada a objetos, por ejemplo, Inheritance
. Para hacer más clara esta cosas, hice lo experimental con
public delegate string CustomDelegate(string a);
// Func<> is a delegate itself, BUILD-IN delegate
//==========
// Short Version Anonymous Function
//----------
Func<string, string> fShort = delegate(string a)
{
return "ttt";
};
// Long Version Anonymous Function
//----------
Func<string, string> fLong = a => "ttt";
MyDelegate customDlg;
Func<string, string> fAssign;
// if we do the thing like this we get the compilation error!!
// because fAssign is not the same KIND as customDlg
//fAssign = customDlg;
Muchos métodos construir-en en marco (por ejemplo, LINQ), recibirá el parámetro de Func<>
delegado. Lo que podemos hacer con este método es
Declare
el delegado de Func<>
tipo y pasarlo a la función en lugar de Define
el delegado personalizado.
Por ejemplo, en el código anterior añado más código
string[] strList = { "abc", "abcd", "abcdef" };
strList.Select(fAssign); // is valid
//strList.Select(customDlg); // Compilation Error!!
El Func tiene un nombre como Func así que si el compilador no dice: No se puede convertir de Func1Name a Func2Name, entonces NO sería menos útil. –
Elisabeth