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 :

Propriété et arguments


Sujet :

VB.NET

  1. #1
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 335
    Par défaut Propriété et arguments
    Bonjour à tous,

    Il s'agit de POO.

    Un pneu a certaines propriété qui sont entré et d'autres qui sont calculé.

    Etant donné que j'ai 4 pneus et qui chacun être different, j'utilise pour les prorpiétés un argument de la classe pneu.
    Selon moi, çà permet que le pneu soit calculé avec ses propres propriétés:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        Private ReadOnly Property dFz(ByVal tire As TireClass) As Double
            Get
                Return (tire.Fz - tire.Fz0 * LambdaFz0) / (tire.Fz0 * LambdaFz0) 'Normalized Change in vertical load
            End Get
        End Property
    Ici les Lambda font toujours 1.

    Or on m'a dit de supprimer ces arguments ce qui donnerais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        Private ReadOnly Property dFz As Double
            Get
                Return (Fz - Fz0 * LambdaFz0) / (Fz0 * LambdaFz0) 'Normalized Change in vertical load
            End Get
        End Property
    Dans ce cas, si une fromule emploie Tire_AvantDroit.dFz, le dFz du pneu avant droit sera calculé avec le Fz et Fz0 du même pneu?

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 194
    Par défaut
    oui

  3. #3
    Membre Expert Avatar de hunteshiva
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Février 2010
    Messages
    1 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2010
    Messages : 1 069
    Par défaut
    Je suis pas trop d'accord avec ce qu'on t'a dit:
    Or on m'a dit de supprimer ces arguments
    supprimer les arguments n'est pas propre pour une fonction (tout comme mettre ta classe complète)

    je dirais qu'il faut placer en arguments les 3 paramètres:
    • Fz
    • Fz0
    • LambdaFz0 (il est déclaré en public?)

    Pour moi ça ce déclare comme ceci:
    *en partant sur l'idée que Fz, Fz0, LambdaFz0 sont des double*
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        Private ReadOnly Property dFz(ByVal Fz As Double, ByVal Fz0 As Double, ByVal LambdaFz0_ As Double) As Double
            Get
                Return (Fz - Fz0 * LambdaFz0_) / (Fz0 * LambdaFz0_) 'Normalized Change in vertical load
            End Get
        End Property
    et tu l'appel comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim MonCalcul as Double
     
    MonCalcul = dFz(tire.Fz, tire.Fz0, LambdaFz0)
    PS: ce que je dit n'est pas la forcément vérité vrai

  4. #4
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 194
    Par défaut
    On lui a dit que le lambda vallait toujours 1 donc

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private ReadOnly Property dFz As Double
            Get
                Return (this.Fz - this.Fz0 ) / ( this.Fz0 ) 'Normalized Change in vertical load
            End Get
        End Property

    et vu que Fz et Fz0 sont des propriété du Pneu, le Dz aussi (si j'ai bien capté
    mais bon travailler sur des conceptes qu'on ne connait pas ca aide pas)

  5. #5
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 335
    Par défaut
    Citation Envoyé par hunteshiva Voir le message
    Je suis pas trop d'accord avec ce qu'on t'a dit:

    supprimer les arguments n'est pas propre pour une fonction (tout comme mettre ta classe complète)

    je dirais qu'il faut placer en arguments les 3 paramètres:
    • Fz
    • Fz0
    • LambdaFz0 (il est déclaré en public?)

    Pour moi ça ce déclare comme ceci:
    *en partant sur l'idée que Fz, Fz0, LambdaFz0 sont des double*
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        Private ReadOnly Property dFz(ByVal Fz As Double, ByVal Fz0 As Double, ByVal LambdaFz0_ As Double) As Double
            Get
                Return (Fz - Fz0 * LambdaFz0_) / (Fz0 * LambdaFz0_) 'Normalized Change in vertical load
            End Get
        End Property
    et tu l'appel comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim MonCalcul as Double
     
    MonCalcul = dFz(tire.Fz, tire.Fz0, LambdaFz0)
    PS: ce que je dit n'est pas la forcément vérité vrai
    Ce n'est pas une fonction mais une propriété, et les arguments que tu utilises dans ta réponse sont également des propriétés.

    En fait j'utilise un argument de la classe pour identifier les autres propriétés du calcul, qu'elle soit du même pneu.

  6. #6
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 194
    Par défaut
    Une propiété n'a pas d'argument

  7. #7
    Membre Expert Avatar de hunteshiva
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Février 2010
    Messages
    1 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2010
    Messages : 1 069
    Par défaut
    Ok autant pour moi,
    je ne dev pas trop de fonctions comma ça
    *mais ça m'interesse dc je reste au vue de ton post *

  8. #8
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 194
    Par défaut
    Le VB c'est tabou on en viendra tous à bout

    Apprendre la POO sur VB

  9. #9
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 335
    Par défaut
    Disons une classe enfant, avec les propriétés:

    DateDeNaissance as double
    et
    ReadOnly Age as double
    return Now-Datedenaissance

    Si Toto est un enfant nee en 1980 et Tutu en 1970

    Que je fais dim AgeDeToto as double = Toto.Age
    çà va aller chercher la propriété age qui retournera
    Now - DateDeNaissance(mais de qui?)

    Alors que si j'ai
    ReadOnly Age(enfant as EnfantClass) as double
    return Now-enfant.Datedenaissance

    Là çà me parait plus clair que Toto.Age retournera Now-Toto.DateDeNaissance

    Est ce que vous voyez ce que je veux dire?

    Est ce que Now-Datedenaissance retourne forcement la date de naissance de l'objet pour lequel on appel la propriété Age?

  10. #10
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 335
    Par défaut
    Je viens de faire le test:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Public Class enfant
     
        Public Property DateDeNaissance As Double
     
        Public ReadOnly Property Age As Double
            Get
                Return 2011 - DateDeNaissance
            End Get
        End Property
     
    End Class
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
            Dim Toto As New enfant
            Dim Tutu As New enfant
     
            Toto.DateDeNaissance = 1980
            Tutu.DateDeNaissance = 1970
     
            MessageBox.Show(Toto.Age.ToString)
        End Sub
    End Class
    Toto a bien 31ans

    Tout mon code est écrit comme çà:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Public Class enfant
     
        Public Property DateDeNaissance As Double
     
        Public ReadOnly Property(ByVal child as enfant) Age As Double
            Get
                Return 2011 - enfant.DateDeNaissance
            End Get
        End Property
     
    End Class


    Mais demeure un problème:

    Retour au pneus...J'ai une propriété Fz en ReadOnly avec 3 arguments pour calculer la charge verticale depuis les propriétés de la voiture. Et puisque je veux faire des graphs des pneus en fonction de Fz de mon choix j'avais surchargé Fz avec un propriété sans argument ni read ou write only.

    Maintenant si Mon Fz en ReadOnly je lui supprime ses argument il en aura autant que celui qui surcharge (à savoir 0), dans ce cas ce n'est pas possible de surcharger.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Public ReadOnly Property Age As Double
            Get
                Return 2011 - DateDeNaissance
            End Get
        End Property
     
        Public Property Age As Double
    Error 1 'Public ReadOnly Property Age As Double' and 'Public Property Age As Double' cannot overload each other because they differ only by 'ReadOnly' or 'WriteOnly'.
    et même si je faisait la propriété Fz avec un getter et un setter je peux imposer Tire_AvantDroit.Fz = 3000Newtons, mais aussitot que Fz apparaitra dans la formule qui calcule le grip (graph que je veux tracer), Fz ira lire sa valeur au lieu de prendre celle que je vient d'écrire...

  11. #11
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 202
    Par défaut
    Citation Envoyé par BenoitM Voir le message
    Une propiété n'a pas d'argument
    et pourquoi donc une propriété n'aurait pas d'arguments ???
    dans le framework il y a plein de propriétés avec des arguments
    exemple : unform.controls(5)
    => public readonly property controls (index as integer) as control
    ceci est une propriété avec un argument si je ne m'abuse !


    Citation Envoyé par BenoitM Voir le message
    Le VB c'est tabou on en viendra tous à bout

    Apprendre la POO sur VB
    vb.net est un langage orienté objet, donc oui on peut apprendre la poo en vb.net
    il est de plus similaire en tout point au c# sauf pour la syntaxe (l'héritage et autres fonctionnent de la même manière)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  12. #12
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 194
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    et pourquoi donc une propriété n'aurait pas d'arguments ???
    dans le framework il y a plein de propriétés avec des arguments
    exemple : unform.controls(5)
    => public readonly property controls (index as integer) as control
    ceci est une propriété avec un argument si je ne m'abuse !




    vb.net est un langage orienté objet, donc oui on peut apprendre la poo en vb.net
    il est de plus similaire en tout point au c# sauf pour la syntaxe (l'héritage et autres fonctionnent de la même manière)
    Non non ce n'est pas un argument c'est juste que la propriété est un array de type control

    En C# c'est impossible de mettre des paramètres dans la définition d'une propriété
    Et je ne vois pas la différence entre une méthode et une propriété si tu y ajoutes des arguments

  13. #13
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 194
    Par défaut
    Et je pense que VB est le seul langage qui l'autorise mais je peux me tromper

  14. #14
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 202
    Par défaut
    Citation Envoyé par BenoitM Voir le message
    Non non ce n'est pas un argument c'est juste que la propriété est un array de type control

    En C# c'est impossible de mettre des paramètres dans la définition d'une propriété
    Et je ne vois pas la différence entre une méthode et une propriété si tu y ajoutes des arguments

    en effet pour controls, c'est le type controlcollection (pas un array) qui expose 2 default property (une avec un integer et une avec un string en paramètre), mais c'est propriétés ont bien des arguments
    je n'ai plus reflector, et justdecompile ne sais pas trop décoder ca on dirait
    en c# il affiche le nom des paramètres et leur utilisation au sein de la propriété, mais pas leur déclaration

    autre exemple, dans le décompilateur un sqldatareader a bien 2 propriétés ou fonctions qui demande un paramètre

    de plus par reflection quand on demande les propriétés du sqldatareader, il affiche bien dans visual studio qu'il y a 2 propriété item qui demandent des paramètres

    sinon en effet c# on a pas l'air de pouvoir en écrire, c'est une limitation de c# par rapport au msil, comme il y a en a sur vb.net aussi

    en fait que vb.net le propose est pas c# c'est un choix de microsoft
    au final une propriété étant compilé comme une méthode Set_NomProperty plus une fonction Get_NomProperty, il n'y a pas de limite technique pour avoir des propriétés paramétrées

    après quand un langage te propose quelque chose, si tu en as besoin utilise le
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  15. #15
    Membre Expert
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Par défaut
    Bah si, ça existe en C#, à ce que je sache il est tout à fait légal d'écrire ceci en C#
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // Dans un Form
    var c = Controls["lblTruc"];
    De même que IList<T> (entre autres) définit un indéxeur générique pour conserver une utilisation type tableau.

    Je vois pas en quoi ça serait une spécificité VB.Net ; ça existe en C# en C++/CLI et même en F# (à voir pour les autres langages .Net plus "exotiques")

    Cordialement !

Discussions similaires

  1. Réponses: 4
    Dernier message: 09/03/2014, 09h38
  2. Réponses: 2
    Dernier message: 21/01/2014, 15h01
  3. Réponses: 2
    Dernier message: 18/08/2013, 12h22
  4. Réponses: 3
    Dernier message: 04/12/2012, 21h56
  5. Transmettre une propriété en argument
    Par programaniac dans le forum Langage
    Réponses: 11
    Dernier message: 25/10/2005, 12h03

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