C# la langue n'est pas le cas, mais .NET le cadre peut être.
Les Contrats de bibliothèque + les outils d'analyse statique introduit dans .NET 4 peut introduire de ces:
Microsoft est à l'aide de [Immuable] et [Pur] à l'intérieur .NET framework 3.5 droite maintenant.
Par exemple, voir [Microsoft.Des contrats.Immuable] et [Microsoft.Des contrats.Pure] à l'intérieur .NET 3.5, System.Core.dll. Malheureusement, ils sont internes. Toutefois, Microsoft.Des contrats.* est surtout né de Spec# recherche, et Spec# a été intégrée dans les Contrats d'Api qui va être de la partie .NET 4.0.
Nous allons voir ce qui vient de. Je n'ai pas vérifié pour voir si la pré-version .NET 4.0 bits contiennent toutes les Api comme [Pur] ou [Immuable] dans les Contrats d'Api. S'ils le font, j'imagine que l'outil d'analyse statique sera le seul à faire respecter la règle, plutôt que de le compilateur.
edit je viens de charger jusqu'Microsoft.Contracts.dll à partir de la dernière pré-version goutte de MS Contrats de Code de cette semaine. Bonne nouvelle: [Pur] et [Mutabilité(Mutabilité.Immuable)] attributs existent dans la bibliothèque, ce qui suggère qu'ils seront dans .NET 4.0. Woohoo!
edit 2 Maintenant que .NET 4 a été libéré, j'ai regardé ces types. [Pur] est toujours là dans le Système.Diagnostics.Les contrats d'espace de noms. Il n'est pas conçue pour un usage général, mais plutôt, pour une utilisation avec le Contrat de l'API de pré - et post-condition de la vérification. Je ne crois pas que c'est le compilateur appliquée. [Mutant] est allé. Il est intéressant de noter, où Microsoft a été l'aide de la Mutabilité et de la Pure attributs .NET 3.5 (interne BigInteger classe System.Core.dll), .NET 4 a déménagé BigInteger dans le Système.Numériques, et a dépouillé la [Pur] et [Mutant] les attributs de désactiver ce type. Bottom line: il s'affiche .NET 4 ne fait rien pour les effets secondaires de vérification.
edit 3 Avec le récemment (fin 2011) aperçu de Microsoft Rosyln compilateur-comme-un-service-outils -- croyait être prévue pour le RTM dans Visual Studio 2015, regardez comme ils ' ll être en mesure de soutenir des trucs comme ça; vous pouvez écrire des extensions pour le compilateur pour vérifier la pureté et de l'immutabilité, et d'émettre des avertissements du compilateur si quelque chose décorées avec ces attributs ne suivez pas les règles. De même, nous sommes à la recherche à quelques années, à l'appui de cette.