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 :

Constructeur - création objet [Débutant]


Sujet :

VB.NET

  1. #1
    Membre actif Avatar de stracoma
    Homme Profil pro
    Médecin
    Inscrit en
    Août 2013
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Maroc

    Informations professionnelles :
    Activité : Médecin

    Informations forums :
    Inscription : Août 2013
    Messages : 413
    Points : 229
    Points
    229
    Par défaut Constructeur - création objet
    Bonsoir.
    J’essaie de comprendre les constructeurs.
    J'ai créé le code suivant
    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
    Public Class Rectangle
        Public hauteur As Double
        Public largeur As Double
     
        Public Sub New()
            Me.hauteur = 10
            Me.largeur = 20
        End Sub
        Public Sub New(ByVal R As Rectangle)
            Me.hauteur = R.hauteur + 3
            Me.largeur = R.largeur + 6
        End Sub
        Public Sub affiche()
            Console.WriteLine(Me.hauteur & " ============ " & Me.largeur)
        End Sub
    End Class
    comme vous voyez après chaque rectangle que je crée par copie, j'ajoute 3 à la hauteur et 6 à la largeur

    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
    Module Module1
     
        Sub Main()
     
            Dim rect1 As New Rectangle
            Dim rect2 As New Rectangle(rect1)
            Dim rect3 As New Rectangle(rect2)
            rect1.affiche()
            rect2.affiche()
            rect3.affiche()
     
            Console.ReadKey()
     
        End Sub
     
    End Module
    peut on faire la même chose sans passer par le constructeur de recopie. C'est à dire en ajoutant une instruction dans le constructeur par défaut
    J'apprends la programmation pour le plaisir

  2. #2
    Membre habitué

    Profil pro
    Inscrit en
    Février 2005
    Messages
    317
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 317
    Points : 183
    Points
    183
    Par défaut
    Je suis pas sur de comprendre, mais peut etre tu veux utiliser des getters / setters pour hauteur, example:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    private _hauteur
    Public Property Hauteur() As Integer
    	Get
    	    Return _hauteur
    	End Get
    	Set(ByVal value As Integer)
    	    _hauteur = value +3
    	End Set
        End Property

  3. #3
    Membre actif Avatar de stracoma
    Homme Profil pro
    Médecin
    Inscrit en
    Août 2013
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Maroc

    Informations professionnelles :
    Activité : Médecin

    Informations forums :
    Inscription : Août 2013
    Messages : 413
    Points : 229
    Points
    229
    Par défaut
    Non je ne parle pas des geters et seters.
    sans passer par le constructeur de recopie je cherche ceci (est ce possible?):

    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
    Module Module1
     
        Sub Main()
     
            Dim rect1 As New Rectangle
            Dim rect2 As New Rectangle
            Dim rect3 As New Rectangle
            rect1.affiche() ' doit afficher: 10 ==== 20
            rect2.affiche() ' doit afficher: 13 ==== 26
            rect3.affiche() ' doit afficher: 16 ==== 32
     
            Console.ReadKey()
     
        End Sub
     
    End Module
    Donc après chaque création d'un objet on rajoute 3 à la hauteur et 6 à la largeur
    J'apprends la programmation pour le plaisir

  4. #4
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut
    bonjour
    Tout est possible,le tout est de definer avec precision ce qu'on veut ...
    Ce comportement curieux de ton shape Rectangle (s'il a une utilite concrete) peut etre implemente par un class avec un compteur d'instance ( = les objets "representant" du class en OOP ) comme ceci:
    code .vb du class revu et renomme (pour eviter la confusion avec le class Rectangle de l'API gdi .net):
    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
     
    Public Class ShapeRectangle
        'maxi instance autorise
        Private Const MaxInstance = 3
        ' compteur d'instance 
        Private Shared countInstance As Integer = 0
        Public Sub New()
     
            If countInstance < MaxInstance Then
                Me.heightValue = 10 + countInstance * 3
                Me.widthValue = 20 + countInstance * 6
                ' maj du cpteur d'instance
                countInstance += 1
            Else
                'reset du compteur
                countInstance = 0
                Me.heightValue = 10 + countInstance * 3
                Me.widthValue = 20 + countInstance * 6
            End If
     
        End Sub
        Private heightValue As Double
        Public ReadOnly Property Height As Double
            Get
                Return heightValue
            End Get
        End Property
        Private widthValue As Double
        Public ReadOnly Property Width As Double
            Get
                Return widthValue
            End Get
     
        End Property
     
     
        Public Function AfficheHeightWidth()
            Return "H : " & Me.Height.ToString & " ============ W : " & Me.Width.ToString
        End Function
    End Class
    code du form utilisateur(1 button+2 textbox):
    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
     
    Public Class Form1
     
     
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim rect1 As New ShapeRectangle
            Dim rect2 As New ShapeRectangle()
            Dim rect3 As New ShapeRectangle()
            TextBox1.Text = rect1.AfficheHeightWidth() + Environment.NewLine +
                rect2.AfficheHeightWidth + Environment.NewLine +
                rect3.AfficheHeightWidth
     
            Dim rect4 As New ShapeRectangle
            TextBox2.Text = rect4.AfficheHeightWidth() 
     
     
        End Sub
    End Class
    bon code....

  5. #5
    Membre actif Avatar de stracoma
    Homme Profil pro
    Médecin
    Inscrit en
    Août 2013
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Maroc

    Informations professionnelles :
    Activité : Médecin

    Informations forums :
    Inscription : Août 2013
    Messages : 413
    Points : 229
    Points
    229
    Par défaut
    Merci MABROUKI de votre réponse. Vous êtes allés trop loin dans votre code, mais vous m'avez filé l'idée

    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
    Public Class Rectangle
        Public hauteur As Double
        Public largeur As Double
        Public Shared N As Integer = 0
        Public Shared M As Integer = 0
        Public Sub New()
            Me.hauteur = 10 + N
            Me.largeur = 20 + M
            N += 3
            M += 6
        End Sub
        Public Sub affiche()
            Console.WriteLine(Me.hauteur & " ============== " & Me.largeur)
        End Sub
    End Class
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Module Module1
     
        Sub Main()
            Dim rect1 As New Rectangle
            Dim rect2 As New Rectangle
            Dim rect3 As New Rectangle
            rect1.affiche()
            rect2.affiche()
            rect3.affiche()
            Console.ReadKey()
     
        End Sub
     
    End Module
    un code inutile pour certains est peut être crucial pour d'autres
    Une autre fois merci
    J'apprends la programmation pour le plaisir

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

Discussions similaires

  1. [SSAS][2k5]autorisation création objet
    Par Bunzo dans le forum SSAS
    Réponses: 2
    Dernier message: 08/09/2008, 15h18
  2. Création Objet ?
    Par modaffar dans le forum Windows Forms
    Réponses: 8
    Dernier message: 09/03/2008, 19h54
  3. création objet avec l ouverture d un fichier excel
    Par levac dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 30/07/2007, 15h51
  4. création Objets personnels
    Par pendulaire dans le forum Deski
    Réponses: 4
    Dernier message: 07/05/2007, 10h38
  5. [PEAR] Création objet HttpRequest
    Par Sebou77 dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 27/02/2007, 11h46

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