Question

Je travaille dans VB.NET v2

J'ai une interface IMyInterface et cette interface implémente une méthode MyMethod .

J'ai un objet MyObjectBase . Cet objet contient une méthode (identique) MyMethod .

1) Si maintenant je fais MyObject hérite de MyObjectBase Implémente IMyInterface dois-je redéfinir? (ombre, remplacement) MyMethod dans la classe MyObject ?

2) Et maintenant, si la méthode MyMethod , j'ai un MyEvent événement ?

Merci.

Était-ce utile?

La solution

Dans VB.NET, vous devez associer manuellement votre contrat d'interface à vos implémentations. Regardez l'exemple suivant:

Interface MyInterface
    Sub Foo()
End Interface

Class TestClass
    Implements MyInterface

    Public Sub Test() Implements MyInterface.Foo
        Console.WriteLine("Test")
    End Sub

    Public Sub Foo()
        Console.WriteLine("Foo")
    End Sub
End Class

Regardez ensuite le code suivant et sa sortie:

Dim x As New TestClass()
x.Foo()                           ' Output: Foo '
Dim y As MyInterface = x
y.Foo()                           ' Output: Test '

Cela présente l'avantage que la mise en œuvre d'une interface ne vous empêche pas de nommer votre fonction comme vous le souhaitez . L'inconvénient est que vous devez associer explicitement vos méthodes de classe à vos déclarations d'interface à l'aide du mot clé Implements .

Tant de choses sur une explication. Permettez-moi maintenant de parler de votre problème: comme vous ne pouvez pas obliger le bouton à implémenter IVisibleChanged, vous pouvez effectuer quelque chose comme ça:

Private Event MyVisibleChanged() Implements IVisibleChanged.VisibleChanged

Private Sub RethrowVisibleChanged() Handles MyBase.VisibleChanged
    RaiseEvent MyVisibleChanged()
End Sub

MyBase est un mot clé VB.NET faisant référence à la superclasse. De même, dans le cas de MyMethod , vous pouvez faire

Private Sub MyInterfaceMethod() Implements IMyInterface.Method
    MyBase.Method()
End Sub

Cela peut sembler être un travail supplémentaire inutile, mais d’une certaine manière, cela a du sens: Button.VisibleChanged et IVisibleChanged.VisibleChanged peuvent être des événements avec deux sémantiques complètement différentes, qui ont juste le même nom (après tout, le bouton ne n'implémente pas IVisibleChanged ). Avec votre code, vous créez explicitement une connexion entre ces deux-là.

Autres conseils

C'est parce que vous implémentez votre classe enfant que vous devez la redéfinir. Je crois que si vous héritez simplement du scénario de base, qui est mis en œuvre de toute façon, vous n’y serez pas obligés si vous n’en avez pas besoin.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top