Implements-AnweisungImplements statement

Gibt eine Schnittstelle oder Klasse an, die im Klassenmodul implementiert wird, in dem sie angezeigt wird.Specifies an interface or class that will be implemented in the class module in which it appears.

SyntaxSyntax

Implementiert [ Schnittstellen | Code_Klasse_ ]Implements [ InterfaceName | Class ]

Das erforderliche InterfaceName- oder Class-Element ist der Name einer Schnittstelle oder Klasse in einer Typbibliothek, deren Methoden über die entsprechenden Methoden in der Visual Basic-Klasse implementiert werden.The required InterfaceName or Class is the name of an interface or class in a type library whose methods will be implemented by the corresponding methods in the Visual Basic class.

HinweiseRemarks

Eine Schnittstelle ist eine Sammlung von Prototypen, die die Elemente (Methoden und Eigenschaften) darstellen, die von der Schnittstelle gekapselt werden; Das heißt, Sie enthält nur die Deklarationen für die Member-Prozeduren.An interface is a collection of prototypes representing the members (methods and properties) that the interface encapsulates; that is, it contains only the declarations for the member procedures. Eine Klasse stellt eine Implementierung aller Methoden und Eigenschaften einer oder mehrerer Schnittstellen bereit.A class provides an implementation of all the methods and properties of one or more interfaces. Klassen stellen den Code bereit, der verwendet wird, wenn jede Funktion von einem Controller der Klasse aufgerufen wird.Classes provide the code used when each function is called by a controller of the class. Alle Klassen implementieren mindestens eine Schnittstelle, die als Standardschnittstelle der Klasse betrachtet wird.All classes implement at least one interface, which is considered the default interface of the class. In Visual Basic ist jedes Mitglied, das nicht explizit ein Mitglied einer implementierten Schnittstelle ist, implizit ein Member der Standardschnittstelle.In Visual Basic, any member that isn't explicitly a member of an implemented interface is implicitly a member of the default interface.

Wenn eine Visual Basic-Klasse eine Schnittstelle implementiert, stellt die Visual Basic-Klasse eigene Versionen aller öffentlichen Prozeduren bereit, die in der Typbibliothek der Schnittstelle angegeben sind.When a Visual Basic class implements an interface, the Visual Basic class provides its own versions of all the Public procedures specified in the type library of the Interface. Neben der Bereitstellung einer Zuordnung zwischen den Schnittstellenprototypen und Ihren Prozeduren führt die Implements -Anweisung dazu, dass die Klasse COM QueryInterface-Aufrufe für die angegebene Schnittstellen-ID akzeptiert.In addition to providing a mapping between the interface prototypes and your procedures, the Implements statement causes the class to accept COM QueryInterface calls for the specified interface ID.

Hinweis

[!HINWEIS] Visual Basic implementiert keine abgeleiteten Klassen oder Schnittstellen.Visual Basic does not implement derived classes or interfaces.

Wenn Sie eine Schnittstelle oder Klasse implementieren, müssen Sie alle Beteiligten öffentlichen Prozeduren einbeziehen.When you implement an interface or class, you must include all the Public procedures involved. Ein fehlendes Element in einer Implementierung einer Schnittstelle oder Klasse verursacht einen Fehler.A missing member in an implementation of an interface or class causes an error. Wenn Sie keinen Code in einem der Prozeduren in einer Klasse platzieren, die Sie implementieren, können Sie den entsprechenden Fehler auslösen (const E_NOTIMPL = &H80004001), damit ein Benutzer der Implementierung erkennt, dass ein Member nicht implementiert ist.If you don't place code in one of the procedures in a class you are implementing, you can raise the appropriate error (Const E_NOTIMPL = &H80004001) so a user of the implementation understands that a member is not implemented.

Die Implements-Anweisung darf nicht in einem Standardmodul angezeigt werden.The Implements statement can't appear in a standard module.

BeispielExample

Im folgenden Beispiel wird gezeigt, wie die Implements -Anweisung verwendet wird, um eines Satz mit Deklarationen mehreren Klassen zur Verfügung zu stellen.The following example shows how to use the Implements statement to make a set of declarations available to multiple classes. Durch die gemeinsame Verwendung der Deklarationen über die Implements -Anweisung muss kein Klasse selbst Deklarationen erstellen.By sharing the declarations through the Implements statement, neither class has to make any declarations itself. Das Beispiel zeigt auch, wie die Verwendung einer Schnittstelle Abstraktion zulässt: eine stark typisierte Variable kann mithilfe des Schnittstellentyps deklariert werden.The example also shows how use of an interface allows abstraction: a strongly-type variable can be declared by using the interface type. Es können dann Objekte verschiedener Klassentypen zugewiesen werden, die die Schnittstelle implementieren.It can then be assigned objects of different class types that implement the interface.

Angenommen, es gibt zwei Formulare, SelectorForm und DataEntryForm.Assume there are two forms, SelectorForm and DataEntryForm. Das Selektor-Formular verfügt über zwei Schaltflächen, Kundendaten und Lieferantendaten.The selector form has two buttons, Customer Data and Supplier Data. Zum Eingeben von Namen-und Adressinformationen für einen Kunden oder Lieferanten klickt der Benutzer auf die Schaltfläche Kunden oder Lieferant im Auswahlformular und gibt dann den Namen und die Adresse mithilfe des Dateneingabeformulars ein.To enter name and address information for a customer or a supplier, the user clicks the customer button or the supplier button on the selector form, and then enters the name and address by using the data entry form. Das Dateneingabeformular verfügt über zwei Textfelder, Name und Adresse.The data entry form has two text fields, Name and Address.

Der folgende Code für die Schnittstellendeklarationen befindet sich in einer Klasse namens PersonalData:The following code for the interface declarations is in a class called PersonalData:

Public Name As String 
Public Address As String 

Der Code, der die Kundendaten unterstützt, befindet sich in einem Klassenmodul namens Customer.The code supporting the customer data is in a class module called Customer. Beachten Sie, dass die PersonalData-Schnittstelle mit Membern implementiert wird, die PersonalData_ mit dem Schnittstellennamen als Präfix benannt sind.Note that the PersonalData interface is implemented with members that are named with the interface name PersonalData_ as a prefix.

Implements PersonalData

'For PersonalData implementation
Private m_name As String
Private m_address As String

'Customer specific
Public CustomerAgentId As Long

'PersonalData implementation
Private Property Let PersonalData_Name(ByVal RHS As String)
    m_name = RHS
End Property
 
Private Property Get PersonalData_Name() As String
    PersonalData_Name = m_name
End Property


Private Property Let PersonalData_Address(ByVal RHS As String)
    m_address = RHS
End Property

Private Property Get PersonalData_Address() As String
    PersonalData_Address = m_address
End Property


'nitialize members
Private Sub Class_Initialize()
    m_name = "[customer name]"
    m_address = "[customer address]"
    CustomerAgentID = 0
End Sub


Der Code, der die Lieferantendaten unterstützt, befindet sich in einem Klassenmodul namens Supplier:The code supporting the supplier data is in a class module called Supplier:

Implements PersonalData

'for PersonalData implementation
Private m_name As String
Private m_address As String

'Supplier specific
Public NumberOfProductLines As Long


'PersonalData implementation
Private Property Let PersonalData_Name(ByVal RHS As String)
    m_name = RHS
End Property
 Private Property Get PersonalData_Name() As String
    PersonalData_Name = m_name
End Property


Private Property Let PersonalData_Address(ByVal RHS As String)
    m_address = RHS
End Property

Private Property Get PersonalData_Address() As String
    PersonalData_Address = m_address
End Property


'initialize members
Private Sub Class_Initialize()
    m_name = "[supplier name]"
    m_address = "[supplier address]"
    NumberOfProductLines = 15
End Sub



Mit dem folgenden Code wird das Selector -Formular unterstützt:The following code supports the Selector form:

Private cust As New Customer 
Private sup As New Supplier 
 
Private Sub Customer_Click() 
Dim frm As New DataEntryForm 
 Set frm.PD = cust 
 frm.Show 1 
End Sub 
 
Private Sub Supplier_Click() 
Dim frm As New DataEntryForm
 Set frm.PD = sup 
 frm.Show 1 
End Sub

Mit dem folgenden Code wird das Dateneingabe Formular unterstützt:The following code supports the Data Entry form:

Private m_pd As PersonalData

Private Sub SetTextFields()
    With m_pd
        Text1 = .Name
        Text2 = .Address
    End With
End Sub

Public Property Set PD(Data As PersonalData) 
    Set m_pd = Data
    SetTextFields
End Property

Private Sub Text1_Change()
    m_pd.Name = Text1.Text
End Sub

Private Sub Text2_Change()
    m_pd.Address = Text2.Text
End Sub


Beachten Sie, dass die m_pd -Variable im Dateneingabeformular mithilfe der PersonalData-Schnittstelle deklariert wird und dass Ihr Objekte der Customer -oder der Supplier -Klasse zugewiesen werden können, da beide Klassen die PersonalData-Schnittstelle implementieren.Note how, in the data entry form, the m_pd variable is declared by using the PersonalData interface, and it can be assigned objects of either the Customer or Supplier class because both classes implement the PersonalData interface.

Beachten Sie auch, dass die m_pd -Variable nur auf die Member der PersonalData-Schnittstelle zugreifen kann.Also note that the m_pd variable can only access the members of the PersonalData interface. Wenn ihm ein Customer -Objekt zugewiesen ist, ist der kundenspezifische Mitglieds CustomerAgentId nicht verfügbar.If a Customer object is assigned to it, the Customer-specific member CustomerAgentId is not available. Wenn ein Supplier -Objekt ihm zugewiesen ist, ist auch der lieferantenspezifische Member NumberOfProductLines nicht verfügbar.Similarly, if a Supplier object is assigned to it, the Supplier-specific member NumberOfProductLines is not available. Das Zuweisen eines Objekts zu Variablen, die mit unterschiedlichen Schnittstellen deklariert werden, bietet ein polymorphes Verhalten.Assigning an object to variables declared by using different interfaces provides a polymorphic behavior.

Beachten Sie auch, dass die Klassen Customer und Suppliers , wie zuvor definiert, die Elemente der PersonalData-Schnittstelle nicht verfügbar machen.Also note that the Customer and Supplier classes, as defined earlier, do not expose the members of the PersonalData interface. Die einzige Möglichkeit für den Zugriff auf die PersonalData-Mitglieder ist das Zuweisen eines Kunden -oder Lieferanten Objekts zu einer als _PersonalData_deklarierten Variable.The only way to access the PersonalData members is to assign a Customer or Supplier object to a variable declared as PersonalData. Wenn ein Vererbungs ähnliches Verhalten gewünscht wird, wobei die Customer -oder Supplier -Klasse die PersonalData-Elemente verfügbar macht, müssen öffentliche Member zur Klasse hinzugefügt werden.If an inheritance-like behavior is desired, with the Customer or Supplier class exposing the PersonalData members, public members must be added to the class. Diese können durch Delegieren an die PersonalData-Schnittstellenimplementierungen implementiert werden.These can be implemented by delegating to the PersonalData interface implementations.

Beispielsweise könnte die Customer -Klasse um Folgendes erweitert werden:For example, the Customer class could be extended with the following:

'emulate PersonalData inheritance
Public Property Let Name(ByVal RHS As String)
    PersonalData_Name = RHS
End Property

Public Property Get Name() As String
    Name = PersonalData_Name
End Property

Public Property Let Address(ByVal RHS As String)
    PersonalData_Address = RHS
End Property

Public Property Get Address() As String
    Address = PersonalData_Address
End Property

Siehe auchSee also

Support und FeedbackSupport and feedback

Haben Sie Fragen oder Feedback zu Office VBA oder zu dieser Dokumentation?Have questions or feedback about Office VBA or this documentation? Unter Office VBA-Support und Feedback finden Sie Hilfestellung zu den Möglichkeiten, wie Sie Support erhalten und Feedback abgeben können.Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.