none
Comment ajouter une méthode d'Extension statique ? RRS feed

  • Question

  •  

    Bonjour,

    J'ai besoin d'ajouter trois méthodes au type DECIMAL de ma solution qui est composée d'une assemblie métier et d'une application web.

    J'ai crée mes deux premières méthodes, qui sont des ToString un peu personalisé...


    Dim
    o As Decimal = 10

    o.ToMyPrice(

    )


    Pour la troisième, j'aurais besoin qu'elle soit une méthode statique et je n'y arrive pas, je voudrais pouvoir taper:
    Dim
    o As Decimal = Decimal.ParseMyPrice("10")

    Est-ce que c'est possible ?

    Merci de votre aide,
    Claude
    lundi 8 mars 2010 17:39

Réponses

  • Bonjour,

    Merci de votre réponse.  A la première lecture, je n'étais pas certain si ma question avait été bien comprise...  Ensuite, j'ai trouvé cette discussion, en anglais, qui représente exactement mon problème: http://madprops.org/blog/static-extension-methods/.

    Si votre réponse est la même que dans cette discussion, c'est à dire, faire ma propre classe Décimal, qui peut-être, hérite de celle de base et y mettre ma méthode statique, je crois que c'est ce que je vais faire, mais ceci est beaucoup moins lisible que ce que j'aurais aimé faire...

    Pour expliquer davantage, j'ai une application qui affiche des coûts, et je voulais centraliser l'écriture des coûts pour que les développeurs ne commencent pas à faire les formatages de ToString chacun de leur coté, j'aurais voulus des méthodes pour écrire et lire des montants dans un format personalisé et unique, plus facile à maintenir !!

    Exemple:

    Sub Button1_OnClick
     dim dInput as Decimal = Decimal.ParseMyPrice( Request("MyInput") )
     dInput = dInput * TAXES
     Response.Write( dInput.ToMyPriceShort )
     Response.Write( dInput.ToMyPriceLong )
    End Sub

    Mais les méthodes d'extension statique ne sont pas possible dans le Framework 3.5.  Du coup, j'ai le choix entre une classe qui hérite et implémente le parse et des méthode d'extension, ou classe qui hérite et qui contient mes trois méthodes...

    Sub Button1_OnClick
     dim dInput as Decimal = MyDecimal.ParseMyPrice( Request("MyInput") )
     dInput = dInput * TAXES
     Response.Write( dInput.ToMyPriceShort )
     Response.Write( dInput.ToMyPriceLong )
    End Sub

    Si quelqu'un à une suggestion, ou si j'ai mal compris votre réponse...  je suis preneur !

    Sur ce, bonne journée,
    Claude
    mardi 9 mars 2010 09:06

Toutes les réponses

  • Bonjour,

    Pourquoi ne pas faire une simple class ?
    A bientot
    Cordialement, Troxsa
    lundi 8 mars 2010 18:25
    Auteur de réponse
  • Bonjour,

    Merci de votre réponse.  A la première lecture, je n'étais pas certain si ma question avait été bien comprise...  Ensuite, j'ai trouvé cette discussion, en anglais, qui représente exactement mon problème: http://madprops.org/blog/static-extension-methods/.

    Si votre réponse est la même que dans cette discussion, c'est à dire, faire ma propre classe Décimal, qui peut-être, hérite de celle de base et y mettre ma méthode statique, je crois que c'est ce que je vais faire, mais ceci est beaucoup moins lisible que ce que j'aurais aimé faire...

    Pour expliquer davantage, j'ai une application qui affiche des coûts, et je voulais centraliser l'écriture des coûts pour que les développeurs ne commencent pas à faire les formatages de ToString chacun de leur coté, j'aurais voulus des méthodes pour écrire et lire des montants dans un format personalisé et unique, plus facile à maintenir !!

    Exemple:

    Sub Button1_OnClick
     dim dInput as Decimal = Decimal.ParseMyPrice( Request("MyInput") )
     dInput = dInput * TAXES
     Response.Write( dInput.ToMyPriceShort )
     Response.Write( dInput.ToMyPriceLong )
    End Sub

    Mais les méthodes d'extension statique ne sont pas possible dans le Framework 3.5.  Du coup, j'ai le choix entre une classe qui hérite et implémente le parse et des méthode d'extension, ou classe qui hérite et qui contient mes trois méthodes...

    Sub Button1_OnClick
     dim dInput as Decimal = MyDecimal.ParseMyPrice( Request("MyInput") )
     dInput = dInput * TAXES
     Response.Write( dInput.ToMyPriceShort )
     Response.Write( dInput.ToMyPriceLong )
    End Sub

    Si quelqu'un à une suggestion, ou si j'ai mal compris votre réponse...  je suis preneur !

    Sur ce, bonne journée,
    Claude
    mardi 9 mars 2010 09:06
  • Bonjour,

    effectivement il n'est pas possible de définir de méthode d'extension sur un type.
    L'intérêt des méthodes d'extension est de pouvoir ajouter une méthode sur une instance, car cette instance porte des valeurs qui pourront être manipulée par la méthode.
    Dans le cas d'une méthode qui serait statique il n'y a aucune valeur à manipuler.

    Comme le suggère TroXsa dans votre cas une simple classe utilitaire ( qui pourrait être statique  ), avec 3 méthodes semble être une solution viable et qui sera tout aussi lisible.

    Cordialement.

    Edit : j'ai trouvé ce lien sur le forum msdn us et vous n'êtes pas le seul à trouver que cet ajout pourrait être utile :)
    mardi 9 mars 2010 09:57
    Modérateur
  • Merci, c'est ce que j'ai fais !
    :-)

    mardi 9 mars 2010 17:44