Vous pouvez faire un peu mieux que les exemples donnés jusqu'à présent, en fait... vous pouvez l'étendre de manière arbitraire :
class Test
{
delegate Hofstadter Hofstadter();
static void Main()
{
// Unfortunately I'm clearly not as smart as the real thing
Hofstadter douglas = () => null;
douglas()()()()()()();
}
}
Et voici une autre horrible alternative, pour de l'art ASCII supplémentaire :
class Test
{
delegate __ ___();
delegate ___ __(___ _);
static void Main()
{
___ _ = () => null;
_ ()((_))();
}
}
S'il vous plaît, ne faites jamais, jamais, jamais cela.
EDIT : Une dernière - bien qu'il s'agisse autant de remplacer les choses par des underscores qu'autre chose, et de réutiliser les noms chaque fois que c'est possible :
class Test
{
delegate void _();
delegate __<_> ___<_>();
delegate ___<_> __<_>(___<_> ____);
static ___<_> ____<_>(___<_> ____) { return ____; }
static __<_> ____<_>() { return ____<_>; }
static void Main()
{
((__<_>)____)(____<_>)();
}
}