Imaginons qu'il regarde dans les types qui sont dans les return pour déduire le type à renvoyer et qu'il renvoi le type le plus "général" (si tu as un classe A et une classe B qui hérite toutes les 2 de C, le type déduis de return new A(); et return new B(); serai donc C)
Je vais te donner un exemple correct (car je suis d'accord que mon ancien exemple qui retournait un int et une string c'est incorrect syntaxiquement) mais où le type est impossible à déduire :
Cet argument n'est pas pertinent, car il y a le même problème avec "var".
L'inférence de type locale (var) est facile à implémenter. En revanche, l'inférence de type sur la définition de la fonction est un peu plus complexe, à cause, entre autres, de la récursion. C'est quelque chose qui peut être fait quand c'est conçu dès le départ, au prix de quelques complexités dans le langage (par exemple F#) ou de sérieuses limitations dans le langage (par exemple OCaml). Je ne pense pas que ce sera ajouté à C# (ou alors peut-être seulement dans des cas assez particuliers ?).
Pour les initialisations en parallèle, ça se fait facilement en F# :
let a, b, c = "test", 8, 3.2
Ca marche aussi dans Mono : http://tirania.org/blog/archive/2009/Dec-23.html
Partager