Partilhar via


Programação orientada a objetos (Visual Basic)

Visual Basic fornece suporte completo para programação orientada a objetos, incluindo encapsulamento, herança e polimorfismo.

Encapsulamento significa que um grupo de propriedades, métodos e outros membros relacionados são tratados como uma única unidade ou objeto.

A herança descreve a capacidade de criar novas classes com base em uma classe existente.

Polimorfismo significa que você pode ter várias classes que podem ser usadas de forma intercambiável, mesmo que cada classe implemente as mesmas propriedades ou métodos de maneiras diferentes.

Esta seção descreve os seguintes conceitos:

Classes e objetos

Os termos classe e objeto às vezes são usados de forma intercambiável, mas, na verdade, as classes descrevem o tipo de objetos, enquanto os objetos são instâncias utilizáveis de classes. Assim, o ato de criar um objeto é chamado de instanciação. Usando a analogia do blueprint, uma classe é um blueprint, e um objeto é um edifício feito a partir desse blueprint.

Para definir uma classe:

Class SampleClass
End Class

Visual Basic também fornece uma versão leve de classes chamadas estruturas que são úteis quando você precisa criar grande matriz de objetos e não deseja consumir muita memória para isso.

Para definir uma estrutura:

Structure SampleStructure
End Structure

Para obter mais informações, consulte:

Membros da turma

Cada classe pode ter diferentes membros de classe que incluem propriedades que descrevem dados de classe, métodos que definem o comportamento de classe e eventos que fornecem comunicação entre diferentes classes e objetos.

Propriedades e campos

Campos e propriedades representam informações que um objeto contém. Os campos são como variáveis porque podem ser lidos ou definidos diretamente.

Para definir um campo:

Class SampleClass
    Public SampleField As String
End Class

As propriedades têm procedimentos get e set, que fornecem mais controle sobre como os valores são definidos ou retornados.

O Visual Basic permite que você crie um campo privado para armazenar o valor da propriedade ou use as chamadas propriedades implementadas automaticamente que criam esse campo automaticamente nos bastidores e fornecem a lógica básica para os procedimentos de propriedade.

Para definir uma propriedade implementada automaticamente:

Class SampleClass
    Public Property SampleProperty as String
End Class

Se você precisar executar algumas operações adicionais para ler e gravar o valor da propriedade, defina um campo para armazenar o valor da propriedade e forneça a lógica básica para armazená-lo e recuperá-lo:

Class SampleClass
    Private m_Sample As String
    Public Property Sample() As String
        Get
            ' Return the value stored in the field.
            Return m_Sample
        End Get
        Set(ByVal Value As String)
            ' Store the value in the field.
            m_Sample = Value
        End Set
    End Property
End Class

A maioria das propriedades tem métodos ou procedimentos para definir e obter o valor da propriedade. No entanto, você pode criar propriedades somente leitura ou somente gravação para impedir que elas sejam modificadas ou lidas. No Visual Basic você pode usar ReadOnly e WriteOnly palavras-chave. No entanto, as propriedades implementadas automaticamente não podem ser somente leitura ou gravação.

Para obter mais informações, consulte:

Métodos

Um método é uma ação que um objeto pode executar.

Nota

No Visual Basic, há duas maneiras de criar um método: a Sub instrução é usada se o método não retorna um valor; a Function instrução é usada se um método retorna um valor.

Para definir um método de uma classe:

Class SampleClass
    Public Function SampleFunc(ByVal SampleParam As String)
        ' Add code here
    End Function
End Class

Uma classe pode ter várias implementações, ou sobrecargas, do mesmo método que diferem no número de parâmetros ou tipos de parâmetros.

Para sobrecarregar um método:

Overloads Sub Display(ByVal theChar As Char)
    ' Add code that displays Char data.
End Sub
Overloads Sub Display(ByVal theInteger As Integer)
    ' Add code that displays Integer data.
End Sub

Na maioria dos casos, você declara um método dentro de uma definição de classe. No entanto, Visual Basic também oferece suporte a métodos de extensão que permitem que você adicione métodos a uma classe existente fora da definição real da classe.

Para obter mais informações, consulte:

Construtores

Construtores são métodos de classe que são executados automaticamente quando um objeto de um determinado tipo é criado. Os construtores geralmente inicializam os membros de dados do novo objeto. Um construtor pode ser executado apenas uma vez quando uma classe é criada. Além disso, o código no construtor sempre é executado antes de qualquer outro código em uma classe. No entanto, você pode criar várias sobrecargas de construtor da mesma maneira que para qualquer outro método.

Para definir um construtor para uma classe:

Class SampleClass
    Sub New(ByVal s As String)
        // Add code here.
    End Sub
End Class

Para obter mais informações, consulte: Tempo de vida do objeto: como os objetos são criados e destruídos.

Destruidores

Os destruidores são usados para destruir instâncias de classes. No .NET Framework, o coletor de lixo gerencia automaticamente a alocação e liberação de memória para os objetos gerenciados em seu aplicativo. No entanto, você ainda pode precisar de destruidores para limpar quaisquer recursos não gerenciados que seu aplicativo cria. Só pode haver um destruidor para uma classe.

Para obter mais informações sobre destruidores e coleta de lixo no .NET Framework, consulte Coleta de lixo.

Evento

Os eventos permitem que uma classe ou objeto notifique outras classes ou objetos quando algo de interesse ocorre. A classe que envia (ou aumenta) o evento é chamada de editor e as classes que recebem (ou manipulam) o evento são chamadas de assinantes. Para obter mais informações sobre eventos, como eles são gerados e tratados, consulte Eventos.

Classes aninhadas

Uma classe definida dentro de outra classe é chamada aninhada. Por padrão, a classe aninhada é privada.

Class Container
    Class Nested
    ' Add code here.
    End Class
End Class

Para criar uma instância da classe aninhada, use o nome da classe container seguido pelo ponto e, em seguida, seguido pelo nome da classe aninhada:

Dim nestedInstance As Container.Nested = New Container.Nested()

Modificadores de acesso e níveis de acesso

Todas as classes e membros da classe podem especificar o nível de acesso que fornecem a outras classes usando modificadores de acesso.

Os seguintes modificadores de acesso estão disponíveis:

Modificador do Visual Basic Definição
Público O tipo ou membro pode ser acessado por qualquer outro código no mesmo assembly ou outro assembly que faça referência a ele.
Privado O tipo ou membro só pode ser acessado por código na mesma classe.
Protegido O tipo ou membro só pode ser acessado por código na mesma classe ou em uma classe derivada.
Amigo O tipo ou membro pode ser acessado por qualquer código no mesmo assembly, mas não de outro assembly.
Protected Friend O tipo ou membro pode ser acessado por qualquer código no mesmo assembly ou por qualquer classe derivada em outro assembly.

Para obter mais informações, consulte Níveis de acesso no Visual Basic.

Instanciando classes

Para criar um objeto, você precisa instanciar uma classe ou criar uma instância de classe.

Dim sampleObject as New SampleClass()

Depois de instanciar uma classe, você pode atribuir valores às propriedades e campos da instância e invocar métodos de classe.

' Set a property value.
sampleObject.SampleProperty = "Sample String"
' Call a method.
sampleObject.SampleMethod()

Para atribuir valores a propriedades durante o processo de instanciação de classe, use inicializadores de objeto:

Dim sampleObject = New SampleClass With
    {.FirstProperty = "A", .SecondProperty = "B"}

Para obter mais informações, consulte:

Classes e membros partilhados

Um membro compartilhado da classe é uma propriedade, procedimento ou campo que é compartilhado por todas as instâncias de uma classe.

Para definir um membro compartilhado:

Class SampleClass
    Public Shared SampleString As String = "Sample String"
End Class

Para acessar o membro compartilhado, use o nome da classe sem criar um objeto desta classe:

MsgBox(SampleClass.SampleString)

Os módulos compartilhados no Visual Basic têm apenas membros compartilhados e não podem ser instanciados. Os membros compartilhados também não podem acessar propriedades, campos ou métodos não compartilhados

Para obter mais informações, consulte:

Tipos anónimos

Os tipos anônimos permitem que você crie objetos sem escrever uma definição de classe para o tipo de dados. Em vez disso, o compilador gera uma classe para você. A classe não tem nome utilizável e contém as propriedades especificadas ao declarar o objeto.

Para criar uma instância de um tipo anônimo:

' sampleObject is an instance of a simple anonymous type.
Dim sampleObject =
    New With {Key .FirstProperty = "A", .SecondProperty = "B"}

Para obter mais informações, consulte: Tipos anônimos.

Herança

A herança permite criar uma nova classe que reutiliza, estende e modifica o comportamento definido em outra classe. A classe cujos membros são herdados é chamada de classe base, e a classe que herda esses membros é chamada de classe derivada. No entanto, todas as classes no Visual Basic herdam implicitamente da Object classe que oferece suporte à hierarquia de classes .NET e fornece serviços de baixo nível para todas as classes.

Nota

Visual Basic não oferece suporte a várias heranças. Ou seja, você pode especificar apenas uma classe base para uma classe derivada.

Para herdar de uma classe base:

Class DerivedClass
    Inherits BaseClass
End Class

Por padrão, todas as classes podem ser herdadas. No entanto, você pode especificar se uma classe não deve ser usada como uma classe base ou criar uma classe que pode ser usada apenas como uma classe base.

Para especificar que uma classe não pode ser usada como uma classe base:

NotInheritable Class SampleClass
End Class

Para especificar que uma classe pode ser usada apenas como uma classe base e não pode ser instanciada:

MustInherit Class BaseClass
End Class

Para obter mais informações, consulte:

Membros substitutos

Por padrão, uma classe derivada herda todos os membros de sua classe base. Se você quiser alterar o comportamento do membro herdado, você precisa substituí-lo. Ou seja, você pode definir uma nova implementação do método, propriedade ou evento na classe derivada.

Os modificadores a seguir são usados para controlar como as propriedades e os métodos são substituídos:

Modificador do Visual Basic Definição
Substituível Permite que um membro da classe seja substituído em uma classe derivada.
Substituições Substitui um membro virtual (substituível) definido na classe base.
NotOverridable Impede que um membro seja substituído em uma classe herdeira.
MustOverride Requer que um membro da classe seja substituído na classe derivada.
Sombras Oculta um membro herdado de uma classe base

Interfaces

Interfaces, como classes, definem um conjunto de propriedades, métodos e eventos. Mas, ao contrário das classes, as interfaces não fornecem implementação. Eles são implementados por classes e definidos como entidades separadas das classes. Uma interface representa um contrato, na medida em que uma classe que implementa uma interface deve implementar todos os aspetos dessa interface exatamente como ela é definida.

Para definir uma interface:

Public Interface ISampleInterface
    Sub DoSomething()
End Interface

Para implementar uma interface em uma classe:

Class SampleClass
    Implements ISampleInterface
    Sub DoSomething
        ' Method implementation.
    End Sub
End Class

Para obter mais informações, consulte:

Genéricos

Classes, estruturas, interfaces e métodos no .NET podem incluir parâmetros de tipo que definem tipos de objetos que eles podem armazenar ou usar. O exemplo mais comum de genéricos é uma coleção, onde você pode especificar o tipo de objetos a serem armazenados em uma coleção.

Para definir uma classe genérica:

Class SampleGeneric(Of T)
    Public Field As T
End Class

Para criar uma instância de uma classe genérica:

Dim sampleObject As New SampleGeneric(Of String)
sampleObject.Field = "Sample string"

Para obter mais informações, consulte:

Delegados

Um delegado é um tipo que define uma assinatura de método e pode fornecer uma referência a qualquer método com uma assinatura compatível. Você pode invocar (ou chamar) o método através do delegado. Os delegados são usados para passar métodos como argumentos para outros métodos.

Nota

Os manipuladores de eventos nada mais são do que métodos que são invocados por meio de delegados. Para obter mais informações sobre como usar representantes no tratamento de eventos, consulte Eventos.

Para criar um delegado:

Delegate Sub SampleDelegate(ByVal str As String)

Para criar uma referência a um método que corresponda à assinatura especificada pelo delegado:

Class SampleClass
    ' Method that matches the SampleDelegate signature.
    Sub SampleSub(ByVal str As String)
        ' Add code here.
    End Sub
    ' Method that instantiates the delegate.
    Sub SampleDelegateSub()
        Dim sd As SampleDelegate = AddressOf SampleSub
        sd("Sample string")
    End Sub
End Class

Para obter mais informações, consulte:

Consulte também