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

Développement Web avec .NET Discussion :

Interface et Factory


Sujet :

Développement Web avec .NET

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2018
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2018
    Messages : 6
    Points : 7
    Points
    7
    Par défaut Interface et Factory
    Bonjour,

    J'ai ce code ci-dessous.


    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
    Public Interface ITestable
     
        Function functionToImplement() As String
     
    End Interface
     
    Public Class TestFactory
        Public Shared Function build() As ITestable
            Return New Test
        End Function
    End Class
     
    Public Class Test
        Implements ITestable
     
        Public Function otherFunction() As String
            Return ""
        End Function
     
        Public Function functionToImplement() As String Implements ITestable.functionToImplement
            Return ""
        End Function
    End Class

    J'ai donc une interface ITestable avec la fonction functionToImplement à implémenter.
    La classe Test implémente cette interface et j'ai une classe TestFactory pour l'instancier.
    La question se situe sur l'exécution de ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim un_test As ITestable = TestFactory.build()
    Dim retour As String = un_test.OtherFunction()
    Une erreur se présente : OtherFunction n'est pas un membre de ITestable.
    J'avoue ne pas comprendre: j'implémente une méthode propre à la classe Test (A moins que ma classe Test soit un objet de type ITestable et OtherFunction doit donc être déclarer dans l'interface).

    Merci

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    le but d'une interface est de faire abstraction de la classe, en passant par un factory ca permet même de pouvoir récupérer des instances de classes différentes, mais ayant toute la même interface
    (par exemple avec une interface pour gérer un capteur, tu peux avoir une classe par type de capteur, et tant qu'elles ont une propriété valeur c'est le seul point intéressant vu de l'extérieur, qu'il y ait 3 méthodes ou une pour trouver cette valeur importe peu)
    donc une classe peut avoir une méthode autre qu'une autre classe n'aura pas, il n'est donc pas logique d'appeler une méthode qui n'est pas dans l'interface en passant par le factory

    après ce qui t'interdit réellement d'écrire .OtherFunction() c'est le fait que un_test soit déclaré de type ITestable, donc visual studio te dis juste que ITestable ne contient pas OtherFunction
    l'instance contenu elle contient bien la méthode, donc il serait possible de l'appeler en castant sur le bon type
    mais c'est à éviter

    donc soit ta méthode a sa place dans l'interface car c'est bien une fonctionnalité générique de l'interface
    soit elle appartient a une interface complémentaire (héritée ou pas) et dans ce cas le cast avec un test d'implémentation (typeof, directcast) pourrait être possible
    soit tu as raté quelque chose ^^
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

Discussions similaires

  1. [VB6] [Interface] ComboBox à plusieurs colonnes
    Par mtl dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 30/03/2004, 17h35
  2. [VB6] [Interface] Horloge 7 segments
    Par selenay dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 07/10/2002, 16h15
  3. interface utilisateur avec OpenGL
    Par demis20 dans le forum OpenGL
    Réponses: 6
    Dernier message: 03/10/2002, 12h27
  4. [VB6] [Interface] Tester le Type de Controle
    Par SpaceFrog dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 16/09/2002, 09h51
  5. [VB6] [Interface] Icones de boutons de barre d'outils
    Par elifqaoui dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 13/09/2002, 15h50

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