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

VB.NET Discussion :

Héritage de constantes


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    208
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 208
    Par défaut Héritage de constantes
    Bonjour,

    J'ai des constantes strings que j'ai placé dans des classes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Public class A
               Public const CONST_1 as string ="..........."
               Public const CONST_2 as string ="..........."
               Public const CONST_3 as string ="..........."
    end class
    Public class B
               Public const CONST_2 as string ="..........."
    end class
    Mes constantes sont des chaines de caractères pour paramétrer des produits
    J'aimerai pouvoir accéder à un seul objet contenant toutes les constantes, le type de la classe utilisée dépendant du type de produit à paramétrer.
    J'ai essayé d'utiliser l'héritage, j'ai donc du changer les constantes en propriété:

    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
     
    Public class A
               Public shared readonly property CONST_1 as string
                        Get
                                 Return "..........."
                        end get
               end property
               Public shared readonly property CONST_2 as string
                         ...........
               end property
               Public shared readonly property CONST_3 as string
                         ...........
               end property
    end class
    Public class B
         Inherits A
               Public Overloads shared readonly property CONST_2 as string
                         ...........
               end property
    end class
    Dans mon code d'appel, j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Dim MyConst as A
    select  case MyProductType
            Case "A"
                  MyConst = new A
           Case "B"
                  MyConst = new B
    end select
     
    SetProduct(MyConst.CONST_2)
    Questions :
    Les propriétés étant partagées, y'a t'il moyen de ne pas instancier d'objet, par exemple en mettant un alias sur la classe en cours d'utilisation?
    Y' a t'il un meilleur moyen pour gérer ce type de cas?
    Dans le cas B, CONST_2 appelle A.CONST_2 alors que B.CONST_2 est bien appelé si MyConst est déclaré en tant que Object : Est ce normal?

  2. #2
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Pourquoi ne pas mettre tout simplement en static (ça doit être shared en VerBeux ) la classe contenant les constantes ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    208
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 208
    Par défaut
    D'accord mais comment switcher de la classe A à la classe B??

  4. #4
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Dans ce cas, en effet, une classe statique n'est pas du tout adapté.

  5. #5
    Membre Expert
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 183
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 183
    Par défaut
    Bonjour.

    S'il ne s'agit que de stocker des valeurs différentes suivant le type de produit, pourquoi ne pas gérer cela dans une liste d'objets contenant chacun la définition d'un produit ?

    Ensuite, tu définis une classe avec une méthode partagé te permettant de récupérer la définition pour un type d'objet donné et au besoin d'initialiser la liste des différentes définitions.

    Pour illustrer :
    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
     
    Option Explicit On
    Option Strict On
     
    Public Class DefinitionProduit
     
        Private Shared blnDefinitionInitialized As Boolean = False
        Private Shared slConstanteProduit As SortedList(Of String, ConstanteProduit)
     
        Public Shared Function Definition(ByVal P As String) As ConstanteProduit
     
            If Not blnDefinitionInitialized Then
                InitiliazeDefinition()
            End If
     
            Return slConstanteProduit.Values(slConstanteProduit.IndexOfKey(P))
     
        End Function
     
        Private Shared Sub InitiliazeDefinition()
     
            blnDefinitionInitialized = True
     
            slConstanteProduit = New SortedList(Of String, ConstanteProduit)
     
            slConstanteProduit.Add("A", New ConstanteProduit("ValConst1Produit1", "ValConst2Produit1"))
            slConstanteProduit.Add("B", New ConstanteProduit("ValConst1Produit2", "ValConst2Produit2"))
            slConstanteProduit.Add("C", New ConstanteProduit("ValConst1Produit3", "ValConst2Produit3"))
            slConstanteProduit.Add("D", New ConstanteProduit("ValConst1Produit4", "ValConst2Produit4"))
     
        End Sub
     
    End Class
     
    Public Class ConstanteProduit
        Private strConst_1 As String
        Private strConst_2 As String
        Public Sub New(ByVal C1 As String, ByVal C2 As String)
            strConst_1 = C1
            strConst_2 = C2
        End Sub
        Public ReadOnly Property Const_1() As String
            Get
                Return strConst_1
            End Get
        End Property
        Public ReadOnly Property Const_2() As String
            Get
                Return strConst_2
            End Get
        End Property
    End Class
    Nota : la définition "en dur" dans le code, n'est pas ce qu'il y a de mieux ... je te conseillerai au minimum de remplacer cela par l'utilisation d'un fichier ressource.
    D'autre part, le code ci-dessus ne gére pas le cas ou le produit n'est pas connu...

    Pour utiliser l'une des constantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    MsgBox(DefinitionProduit.Definition("A").Const_1)
    MsgBox(DefinitionProduit.Definition("D").Const_2)
    Cdt.

Discussions similaires

  1. [Postgresql]Héritage
    Par lheureuxaurelie dans le forum PostgreSQL
    Réponses: 13
    Dernier message: 02/10/2008, 09h18
  2. [Postgres] Héritage + Clés
    Par k-reen dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 21/05/2003, 16h37
  3. [ADO] Constantes des types de champ
    Par SpaceFrog dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 05/09/2002, 11h08
  4. Héritage entre Forms
    Par BarBal dans le forum Composants VCL
    Réponses: 7
    Dernier message: 29/08/2002, 17h44
  5. Au sujet des constantes
    Par FranT dans le forum Langage
    Réponses: 8
    Dernier message: 09/08/2002, 11h03

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