D’après la dernière feuille de route de la .Net Foundation, laquelle est chargée de superviser l’évolution des projets open source .Net, ce qui est le cas notamment du langage de programmation orienté objet C# de Microsoft, la version 8 de C# pourra utiliser des types de référence nullable (https://docs.microsoft.com/fr-fr/dotnet/api/System.Nullable?view=netframework-4.7) afin d'améliorer la qualité du code. Les types nullable peuvent représenter toutes les valeurs d’un type sous-jacent ainsi qu’une autre valeur null selon Microsoft. La fonctionnalité ajoute des types de référence sécurisés en plus des types qualifiés de non-nullable. Cela signifie que les compilateurs enverront une alerte au développeur si les types nullable sont déréférencés ou si des valeurs null sont attribuées à des types de variables non-nullable.
Le type de référence nullable doit permettre aux développeurs de se prémunir contre les exceptions de référence null. L’une des fonctions essentielles est d’exprimer un null potentiel. Le compilateur pourra savoir si quelque chose n'est pas null et signalera au développeur qu’il a assigné un null à une référence qui n'a pas été déclarée null. La fonction permet donc aux développeurs de repérer et d’éliminer les bugs.
Parmi les nouveautés de la future version, citons :
- Une fonction opt-in pour résoudre les comportements de rupture.
- Une capacité de programmation d'interfaces par défaut : cette fonction permet de faire évoluer les interfaces en utilisant des solutions d'extension virtuelles. Ainsi, l’auteur d'une API pourra ajouter des méthodes à une interface dans des futures versions sans rompre avec la source ou porter atteinte à la compatibilité binaire. Cette fonction est déjà disponible dans des langages comme Java.
- Une fonction de flux asynchrones : elle fournit une abstraction asynchrone de l’interface générique IEnumerable pour les collections non génériques pouvant être énumérées.
- Une fonction Extension everything : c’est un moyen de définir de nouveaux types de membres d'extension. Le langage C# permet déjà de définir des méthodes qui agissent comme méthodes d'instance du type étendu. Mais, la fonction d’extension de C# 8 est plus large : elle prend en charge les membres de classe statique et les membres d’instances.
Microsoft n’a pas voulu donner de date de sortie pour C# 8.