IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

Est-il possible d'ajouter des méthodes à UriBuilder?


Sujet :

ASP.NET

  1. #1
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut Est-il possible d'ajouter des méthodes à UriBuilder?
    Salut,

    J'ai pas l'impression que cette classe prévue pour. Il me manque un moyen simple d'ajouter, modifier, supprimer des paramètres. Pour le moment, j'ai fait cette classe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
        public class UriFactory
        {
            public UriFactory() { }
            public UriFactory(string host) { this.Host = host; }
            public UriFactory(string host, string path) { this.Host = host; this.Path = path; }
     
            private Dictionary<string, string> parameters = null;
            private string _host = string.Empty;
            private string _path = string.Empty;
     
            public string Path
            {
                get { return _path; }
                set { _path = value; }
            }
     
            public string Host
            {
                get { return _host; }
                set { _host = value; }
            }
     
            public void SetParam(string key, object value)
            {
                if (parameters == null)
                    parameters = new Dictionary<string, string>();
     
                if (parameters.ContainsKey(key))
                    parameters[key] = value.ToString();
                else
                    parameters.Add(key, value.ToString());
            }
     
            public string GetParam(string key)
            {
                string value = string.Empty;
                parameters.TryGetValue(key, out value);
                return value;
            }
     
            public void RemoveParam(string key)
            {
                parameters.Remove(key);
            }
     
            public void ClearParam()
            {
                parameters.Clear();
            }
     
            public override string ToString()
            {
                StringBuilder str = new StringBuilder(string.Format("http://{0}/{1}", Host, Path));
                if (parameters.Count > 0)
                {
                    str.Append("?");
                    int i = 0;
                    foreach (KeyValuePair<string, string> entry in parameters)
                    {
                        if (i == 0)
                        {
                            str.Append(string.Format("{0}={1}", entry.Key, entry.Value));
                            i++;
                        }
                        else
                            str.Append(string.Format("&amp;{0}={1}", entry.Key, entry.Value));
                    }
                }
                return str.ToString();
            }
        }
    J'aimerai tout de même conserver UriBuilder. Si quelqu'un a une idée, je suis preneur.

    Merci
    "Winter is coming" (ma nouvelle page d'accueil)

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Je ne suis pas sûr de bien comprends pas ton problème...

    On ne peut pas ajouter des méthodes à une classe existante, mais ça je pense que tu le sais déjà... Par contre tu peux toujours créer une classe qui hérite de UriBuilder pour ajouter ce qui te manque. Ou alors tu peux aussi créer des méthodes d'extension pour UriBuilder

  3. #3
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    Citation Envoyé par tomlev Voir le message
    On ne peut pas ajouter des méthodes à une classe existante, mais ça je pense que tu le sais déjà...
    Sauf si elle est partielle non? Bon, ce n'est pas le cas de UriBuilder.
    Citation Envoyé par tomlev Voir le message
    Ou alors tu peux aussi créer des méthodes d'extension pour UriBuilder
    C'est plutôt ça que je souhaiterai faire, mais j'avoue que je ne sais pas trop comment. Je ne l'ai jamais fait.

    Comment fait-on pour créer des extensions de classe? Est-ce possible d'en faire en 2.0?

    Cette page est interessante.

    Merci de ton aide.

    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par Immobilis Voir le message
    Sauf si elle est partielle non? Bon, ce n'est pas le cas de UriBuilder.
    Euh, non, partial ça n'a rien à voir avec ça... C'est ce qui permet de séparer le code d'une classe en plusieurs fichiers, mais après la compilation ça n'a plus de sens de dire qu'une classe est partielle. Tu ne peux pas utiliser ça pour étendre une classe déjà existante

    Citation Envoyé par Immobilis Voir le message
    C'est plutôt ça que je souhaiterai faire, mais j'avoue que je ne sais pas trop comment. Je ne l'ai jamais fait.

    Comment fait-on pour créer des extensions de classe? Est-ce possible d'en faire en 2.0?
    Non, c'est à partir de C# 3.0. Cela dit tu peux tout à fait utiliser le compilateur C# 3.0 et cibler le framework 2.0, à condition de ne pas utiliser de fonctionnalité spécifique à .NET 3.5. Tout se passe au niveau du compilateur, à la fin le MSIL généré est tout à fait exécutable par le CLR 2.0 (qui n'a d'ailleurs pas changé en .NET 3.5)

    Le lien que tu as donné montre assez bien ce que c'est qu'une méthode d'extension. Si tu veux une explication plus complète :

    C'est une méthode statique, déclarée dans une classe statique, dont le premier paramètre porte le modificateur this. Cela permet d'appeler cette méthode comme si c'était une méthode membre du type du premier paramètre. Par exemple, pour "ajouter" une méthode Reverse à la classe String :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public static class StringExtensions
    {
        public static string Reverse(this string s)
        {
            char[] chars = s.ToCharArray();
            Array.Reverse(chars);
            return new string(chars);
        }
    }
    Tu peux l'utiliser comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    string foo = "Hello world";
    string bar = foo.Reverse();
    En fait le compilateur transforme ce code comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    string foo = "Hello world";
    string bar = StringExtensions.Reverse(foo);
    Pour pouvoir utiliser une méthode d'extension, il faut importer le namespace où elle est déclarée avec using

    En tous cas, pour ton problème je pense que la meilleure solution est de créer une classe héritée de UriBuilder

  5. #5
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Euh, non, partial ça n'a rien à voir avec ça... C'est ce qui permet de séparer le code d'une classe en plusieurs fichiers, mais après la compilation ça n'a plus de sens de dire qu'une classe est partielle. Tu ne peux pas utiliser ça pour étendre une classe déjà existante.
    Ok. Je pensais qu'une classe partielle restait partielle.
    Citation Envoyé par tomlev Voir le message
    En tous cas, pour ton problème je pense que la meilleure solution est de créer une classe héritée de UriBuilder
    C'est effectivement le plus simple. La "beauté" de l'extension est de pouvoir utiliser le même objet, dans mon cas UriBuilber.

    Je te remercie.

    A+
    "Winter is coming" (ma nouvelle page d'accueil)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 22/06/2010, 11h03
  2. Est il possible d'ajouter des composants WPF a un simple form?
    Par NoussaL dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 30/10/2008, 14h12
  3. Réponses: 3
    Dernier message: 07/04/2005, 15h04
  4. Réponses: 7
    Dernier message: 08/03/2004, 15h30
  5. [CR] Est il possible de créer des univers avec Seagate Info?
    Par Frank dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 27/06/2002, 15h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo