Compartilhar via


Interfaces (Visual Basic)

Interfaces define the properties, methods, and events that classes can implement. Interfaces allow you to define features as small groups of closely related properties, methods, and events; this reduces compatibility problems because you can develop enhanced implementations for your interfaces without jeopardizing existing code. You can add new features at any time by developing additional interfaces and implementations.

There are several other reasons why you might want to use interfaces instead of class inheritance:

  • Interfaces are better suited to situations in which your applications require many possibly unrelated object types to provide certain functionality.

  • Interfaces are more flexible than base classes because you can define a single implementation that can implement multiple interfaces.

  • Interfaces are better in situations in which you do not have to inherit implementation from a base class.

  • Interfaces are useful when you cannot use class inheritance. For example, structures cannot inherit from classes, but they can implement interfaces.

Declarando Interfaces

Interface definitions are enclosed within the Interface and End Interface statements. Following the Interface statement, you can add an optional Inherits statement that lists one or more inherited interfaces. The Inherits statements must precede all other statements in the declaration except comments. As instruções restantes na definição de interface devem ser Event, Sub, Function, Property, Interface, Class, Structure, e Enum instruções. Interfaces cannot contain any implementation code or statements associated with implementation code, such as End Sub or End Property.

In a namespace, interface statements are Friend by default, but they can also be explicitly declared as Public or Friend. Interfaces defined within classes, modules, interfaces, and structures are Public by default, but they can also be explicitly declared as Public, Friend, Protected, or Private.

ObservaçãoObservação

The Shadows keyword can be applied to all interface members. The Overloads keyword can be applied to Sub, Function, and Property statements declared in an interface definition. In addition, Property statements can have the Default, ReadOnly, or WriteOnly modifiers. None of the other modifiers—Public, Private, Friend, Protected, Shared, Overrides, MustOverride, or Overridable—are allowed. For more information, see Contextos de declaração e níveis de acesso padrão (Visual Basic).

Por exemplo, o código a seguir define uma interface com uma função, uma propriedadee um evento.

Interface IAsset
    Event ComittedChange(ByVal Success As Boolean)
    Property Division() As String
    Function GetID() As Integer
End Interface

Implementar Interfaces

O Visual Basic reservada palavra Implements é usado em duas maneiras. O Implementsdedemonstrativo , significa que uma classe ou estrutura implementa uma interface. O Implements palavra-chave significa que um membro de classe ou estrutura implementa um membro específico de interface .

Implements Statement

Se uma classe ou estrutura implementa uma ou mais interfaces, ele deve incluir o Implements demonstrativo imediatamente após a Class ou Structure demonstrativo. O Implementsdedemonstrativo requer uma lista separada por vírgulas-de interfaces para ser implementado por uma classe. A classe ou estrutura deve implementar todos os membros de interface usando o Implements palavra-chave.

Palavra-chave Implements

O Implements palavra-chave requer uma lista separada por vírgulas-de membros da interface . Geralmente, apenas um membro único interface for especificado, mas você pode especificar vários membros. A especificação de um membro de interface consiste em nome da interface deve ser especificado em uma demonstrativo do implementa dentro da classe; um período; e o nome da funçãode membro, da propriedadeou do evento a serem implementados. O nome do membro que implementa um membro de interface pode usar qualquer identificadorde legal e não está limitado ao InterfaceName_MethodName convenção usada em versões anteriores do Visual Basic.

Por exemplo, o código a seguir mostra como declarar uma sub-rotina nomeada Sub1 que implementa um método de uma interface:

Class Class1
    Implements interfaceclass.interface2

    Sub Sub1(ByVal i As Integer) Implements interfaceclass.interface2.Sub1
    End Sub
End Class

Os tipos de parâmetro e tipos de retorno do membro implementação devem coincidir com apropriedade ou um membro da interface declaração na interface. A maneira mais comum para implementar um elemento de uma interface é com um membro que tenha o mesmo nome da interface, conforme mostrado no exemplo anterior.

Para declarar a implementação de ummétodode interface, você pode usar todos os atributos que são legais em declarações de método de instância, incluindo Overloads, Overrides, Overridable, Public, Private, Protected, Friend, Protected Friend, MustOverride, Default, e Static. O Shareddeatributo não é legal, pois ele define uma classe em vez de um métodode instância.

Usando Implements, você também pode escrever um único método que implementa vários métodos definidos em uma interface, como no exemplo a seguir:

Class Class2
    Implements I1, I2

    Protected Sub M1() Implements I1.M1, I1.M2, I2.M3, I2.M4
    End Sub
End Class

Você pode usar um membro particular para implementar um membro da interface . Quando um membro particular implementa um membro de uma interface, esse membro se torna disponível por meio da interface , mesmo que ele não está disponível diretamente em variáveis de objeto para a classe.

Exemplos de implementação de interface

Classes that implement an interface must implement all its properties, methods, and events.

The following example defines two interfaces. The second interface, Interface2, inherits Interface1 and defines an additional property and method.

Interface Interface1
    Sub sub1(ByVal i As Integer)
End Interface

' Demonstrates interface inheritance.
Interface Interface2
    Inherits Interface1
    Sub M1(ByVal y As Integer)
    ReadOnly Property Num() As Integer
End Interface

The next example implements Interface1, the interface defined in the previous example:

Public Class ImplementationClass1
    Implements Interface1
    Sub Sub1(ByVal i As Integer) Implements Interface1.sub1
        ' Insert code here to implement this method.
    End Sub
End Class

The final example implements Interface2, including a method inherited from Interface1:

Public Class ImplementationClass2
    Implements Interface2
    Dim INum As Integer = 0
    Sub sub1(ByVal i As Integer) Implements Interface2.sub1
        ' Insert code here that implements this method.
    End Sub
    Sub M1(ByVal x As Integer) Implements Interface2.M1
        ' Insert code here to implement this method.
    End Sub

    ReadOnly Property Num() As Integer Implements Interface2.Num
        Get
            Num = INum
        End Get
    End Property
End Class

Title

Description

Passo a passo: Criando e implementando interfaces (Visual Basic)

Provides a detailed procedure that takes you through the process of defining and implementing your own interface.

Variação em Interfaces genéricas (C# e Visual Basic)

Discute a covariância e/contravariância no interfaces genéricas e fornece uma lista de interfaces genéricas variant a.NET Framework.