Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Atteint de JavaScriptite Aiguë [Cyril Durand]

Expert ASP.net Ajax et WCF, Cyril Durand parle dans son blog de point techniques sur ASP.net, ASP.net Ajax, JavaScript, WCF et .net en général. Cyril est également consultant indépendant, n'hésitez pas à le contacter pour de l'assistance sur vos projets

Actualités

  • Blog de Cyril DURAND, passionné de JavaScript, Ajax, ASP.net et tout ce qui touche au developpement Web Client-Side.

    N'hésitez pas à me contacter pour vos projets .net : architecture, accompagnement, formation, ...

    View Cyril Durand's profile on LinkedIn
    hit counters


    Expertise Commerce server et BizTalk

VB.net et arguments optionnels, et C# dans tout ça ?

J'avais déjà parlé il y a quelques temps des paramètres optionnels de VB.net : C# et paramètre optional. Je me suis récemment rendu compte d'une autre particularité.

Soit une assembly écrit en VB.net possédant une seule méthode :

Public Class Class1 Shared Sub Test(Optional ByVal i As Integer = 123) Console.WriteLine(i) End Sub End Class

Puis une deuxième assembly utilisant cette assembly :

Module Module1 Sub Main() ClassLibrary1.Class1.Test() End Sub End Module

Sans grande surprise, si on exécute la deuxième assembly, "123" va s'afficher sur la console.

Par contre si vous modifiez la valeur de l'argument optionnel de la première assembly, puis copiez l'assembly compilé dans le dossier de la 2ème assembly, alors votre application affichera toujours "123" et non la nouvelle valeur !
Mais si vous recompilez la deuxième assembly en faisant référence à votre première assembly alors vous aurez le résultat attendu.

Pourquoi ?

Les paramètres optionnels ne sont que des attributs ajoutés aux paramètres de la méthode. Si l'on appel ces méthodes en omettant des paramètres c'est lors de la compilation qu'ils seront rajoutés.


Les paramètres optionnels font partis des rares fonctionnalités que j'aurais envie de voir en C#. Cependant, on vient de voir que l'implémentation de VB.net pose quelques soucis, de plus cet implémentation n'est pas CLS compliant.

Existe-t-il une façon de rendre les paramètres optionnels CLS compliant ? Alors que je lisais Framework Ddesign Guidelines, un des auteurs explique que C# (et VB.net) pourrait implémenter cette fonctionnalité comme un sucre syntaxique. C'est à dire qu'au lieu de rajouter des attributs sur les arguments, le compilateur génère n méthodes en fonction des différents paramètres optionels.

Par exemple ce code :

public class HopeThings { public void MyMethod(int a, optional int b = 0) { } }

serait compilé ainsi :

public class HopeThingsCompiled { public void MyMethod(int a) { this.MyMethod(a, 0); } public void MyMethod(int a, int b) { } }

Bien sur cela pose quelques soucis puisque l'on ne pourra plus choisir les paramètres que l'on veut renseigner grâce à l'opérateur := de VB.net

Module Module1 Sub Main() MyMethod(b:=3) End Sub Public Sub MyMethod(Optional ByVal a As Integer = 0, Optional ByVal b As Integer = 0) End Sub End Module

Il y a surement d'autres cas actuellement possible en VB.net qui deviendront impossible avec cette astuce.

Qu'en pensez-vous ?

Posted: jeudi 2 octobre 2008 21:17 par cyril
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :

Commentaires

Ashi4 a dit :

Je vais peux être dire une bétise mais il me semble que Optional est remplassable par une surcharge de la méthode. ce qui revient au même. sauf peut être au niveau de la lisibilité du code et du nombre de fonction à implémenter. perso j'utilise plus la surcharge que Optionnal car cela se lit plus facilement (à mes yeux)

# octobre 4, 2008 15:03

cyril a dit :

Oui la surcharge est envisageable mais VB permet de spécifier les arguments souhaités via l'opérateur := ce qui n'est pas possible avec la surcharge, c'est ce que j'explique en fin de post :)

# octobre 4, 2008 15:32
Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- Merci par Blog de Jérémy Jeanson le 10-01-2019, 20:47

- Office 365: Script PowerShell pour auditer l’usage des Office Groups de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 11:02

- Office 365: Script PowerShell pour auditer l’usage de Microsoft Teams de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 10:39

- Office 365: Script PowerShell pour auditer l’usage de OneDrive for Business de votre tenant par Blog Technique de Romelard Fabrice le 04-25-2019, 15:13

- Office 365: Script PowerShell pour auditer l’usage de SharePoint Online de votre tenant par Blog Technique de Romelard Fabrice le 02-27-2019, 13:39

- Office 365: Script PowerShell pour auditer l’usage d’Exchange Online de votre tenant par Blog Technique de Romelard Fabrice le 02-25-2019, 15:07

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Stream Portal par Blog Technique de Romelard Fabrice le 02-21-2019, 17:56

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Video Portal par Blog Technique de Romelard Fabrice le 02-18-2019, 18:56

- Office 365: Script PowerShell pour extraire les Audit Log basés sur des filtres fournis par Blog Technique de Romelard Fabrice le 01-28-2019, 16:13

- SharePoint Online: Script PowerShell pour désactiver l’Option IRM des sites SPO non autorisés par Blog Technique de Romelard Fabrice le 12-14-2018, 13:01