Objetos e aulas em Visual Basic

Um objeto é uma combinação de código e dados que podem ser tratados como uma unidade. Um objeto pode ser uma peça de uma aplicação, como um controlo ou um formulário. Uma aplicação inteira também pode ser um objeto.

Quando cria uma aplicação em Visual Basic, trabalha constantemente com objetos. Pode utilizar objetos fornecidos por Visual Basic, tais como controlos, formulários e objetos de acesso a dados. Também pode utilizar objetos de outras aplicações dentro da sua aplicação Visual Basic. Pode até criar os seus próprios objetos e definir propriedades e métodos adicionais para eles. Os objetos agem como blocos de construção pré-fabricados para programas - deixam-no escrever um código uma vez e reutilizá-lo uma e outra vez.

Este tópico discute objetos em detalhe.

Objetos e classes

Cada objeto em Visual Basic é definido por uma classe. Uma classe descreve as variáveis, propriedades, procedimentos e eventos de um objeto. Objetos são casos de aulas; pode criar os objetos que precisar depois de definir uma classe.

Para entender a relação entre um objeto e sua classe, pense em cortadores de biscoitos e cookies. O cortador de biscoitos é a classe. Define as características de cada cookie, por exemplo, tamanho e forma. A aula é usada para criar objetos. Os objetos são os biscoitos.

Tem de criar um objeto antes de poder aceder aos seus membros, exceto para Shared membros que possam ser acedidos sem um objeto da classe.

Criar um objeto a partir de uma classe

  1. Determine a partir da classe que pretende criar um objeto, ou defina a sua própria classe. Por exemplo:

    Public Class Customer
        Public Property AccountNumber As Integer
    End Class
    
  2. Escreva uma Declaração Dim para criar uma variável à qual pode atribuir uma instância de classe. A variável deve ser do tipo da classe desejada.

    Dim nextCustomer As Customer
    
  3. Adicione a palavra-chave do Novo Operador para inicializar a variável a uma nova instância da classe.

    Dim nextCustomer As New Customer
    
  4. Agora pode aceder aos membros da classe através da variável de objeto.

    nextCustomer.AccountNumber = lastAccountNumber + 1
    

Nota

Sempre que possível, deve declarar a variável como do tipo de classe que pretende atribuir-lhe. Isto chama-se ligação antecipada. Se não conhecer o tipo de classe na hora de compilar, pode invocar a ligação tardia declarando a variável para ser do Tipo de Dados do Objeto. No entanto, a ligação tardia pode tornar o desempenho mais lento e limitar o acesso aos membros do objeto de tempo de execução. Para mais informações, consulte a Declaração Variável de Objetos.

Múltiplas instâncias

Objetos recém-criados a partir de uma classe são muitas vezes idênticos uns aos outros. Uma vez que existam como objetos individuais, no entanto, as suas variáveis e propriedades podem ser alteradas independentemente das outras instâncias. Por exemplo, se adicionar três caixas de verificação a um formulário, cada objeto de caixa de verificação é um exemplo da CheckBox classe. Os objetos individuais CheckBox partilham um conjunto comum de características e capacidades (propriedades, variáveis, procedimentos e eventos) definidos pela classe. No entanto, cada um tem o seu próprio nome, pode ser ativado separadamente e desativado, e pode ser colocado em um local diferente no formulário.

Membros do objeto

Um objeto é um elemento de uma aplicação, representando um exemplo de uma classe. Campos, propriedades, métodos e eventos são os blocos de construção de objetos e constituem os seus membros.

Acesso aos Membros

Acede a um membro de um objeto especificando, por ordem, o nome da variável do objeto, um período (.) e o nome do membro. O exemplo a seguir define a Text propriedade de um Label objeto.

warningLabel.Text = "Data not saved"

Lista de sócios intelliSense

O IntelliSense lista os membros de uma classe quando invoca a opção de Lista de Membros, por exemplo, quando digita um período (.) como operador de acesso a membros. Se escrever o período que segue o nome de uma variável declarada como instância dessa classe, o IntelliSense lista todos os membros da instância e nenhum dos membros partilhados. Se escrever o período que segue o próprio nome de classe, o IntelliSense lista todos os membros partilhados e nenhum dos membros do caso. Para mais informações, consulte o IntelliSense.

Campos e propriedades

Campos e propriedades representam informação armazenada num objeto. Recupera e define os seus valores com declarações de atribuição da mesma forma que recupera e define variáveis locais num procedimento. O exemplo seguinte recupera a Width propriedade e define a ForeColor propriedade de um Label objeto.

Dim warningWidth As Integer = warningLabel.Width
warningLabel.ForeColor = System.Drawing.Color.Red

Note que um campo também é chamado de variável de membro.

Utilize os procedimentos de propriedade quando:

  • É necessário controlar quando e como um valor é definido ou recuperado.

  • O imóvel tem um conjunto de valores bem definido que precisam de ser validados.

  • Definir o valor causa alguma mudança percetível no estado do objeto, como uma IsVisible propriedade.

  • A definição do imóvel provoca alterações a outras variáveis internas ou aos valores de outras propriedades.

  • Um conjunto de passos deve ser realizado antes que a propriedade possa ser definida ou recuperada.

Utilize campos quando:

  • O valor é de um tipo auto-validador. Por exemplo, ocorre um erro ou conversão automática de dados se um valor diferente True ou False for atribuído a uma Boolean variável.

  • Qualquer valor na gama suportada pelo tipo de dados é válido. Isto é verdade para muitas propriedades do tipo Single ou Double.

  • A propriedade é um tipo de String dados, e não há restrição no tamanho ou valor da cadeia.

  • Para mais informações, consulte os Procedimentos de Propriedade.

Dica

Mantenha sempre os campos não constantes privados. Quando quiser torná-lo público, use uma propriedade em vez disso.

Métodos

Um método é uma ação que um objeto pode realizar. Por exemplo, Add é um método do ComboBox objeto que adiciona uma nova entrada a uma caixa de combinação.

O exemplo a seguir demonstra o Start método de um Timer objeto.

Dim safetyTimer As New System.Windows.Forms.Timer
safetyTimer.Start()

Note que um método é simplesmente um procedimento que é exposto por um objeto.

Para mais informações, consulte Os Procedimentos.

Evento

Um evento é uma ação reconhecida por um objeto, como clicar no rato ou premir uma tecla, e para a qual pode escrever código para responder. Os eventos podem ocorrer como resultado de uma ação do utilizador ou código de programa, ou podem ser causados pelo sistema. O código que assinala um evento é dito para elevar o evento, e o código que lhe responde é dito para manuseá-lo .

Também pode desenvolver os seus próprios eventos personalizados para ser levantado pelos seus objetos e manuseado por outros objetos. Para mais informações, consulte Eventos.

Membros de instância e membros partilhados

Quando se cria um objeto a partir de uma aula, o resultado é um exemplo dessa classe. Os membros que não são declarados com a palavra-chave Partilhada são membros de instância, que pertencem estritamente a essa instância em particular. Um membro de um caso num caso é independente do mesmo membro em outro caso da mesma classe. Uma variável de membro de exemplo, por exemplo, pode ter valores diferentes em diferentes instâncias.

Os membros declarados com a Shared palavra-chave são membros partilhados, que pertencem à classe como um todo e não em nenhum caso particular. Um membro partilhado existe apenas uma vez, não importa quantos casos da sua classe você cria, ou mesmo se você não criar casos. Uma variável de membro partilhado, por exemplo, tem apenas um valor, que está disponível para todos os códigos que podem aceder à classe.

Acesso a membros não partilhados

  1. Certifique-se de que o objeto foi criado a partir da sua classe e atribuído a uma variável de objeto.

    Dim secondForm As New System.Windows.Forms.Form
    
  2. Na declaração que acede ao membro, siga o nome variável do objeto com o operador de acesso ao membro (.) e, em seguida, o nome do membro.

    secondForm.Show()
    

Acesso a membros partilhados

  • Siga o nome da classe com o operador de acesso ao membro (.) e, em seguida, o nome do membro. Deve sempre aceder a um Shared membro do objeto diretamente através do nome da classe.

    Console.WriteLine("This computer is called " & Environment.MachineName)
    
  • Se já criou um objeto a partir da classe, pode, em alternativa, aceder a um Shared membro através da variável do objeto.

Diferenças entre classes e módulos

A principal diferença entre classes e módulos é que as classes podem ser instantâneas como objetos enquanto os módulos padrão não podem. Como há apenas uma cópia dos dados de um módulo padrão, quando uma parte do seu programa altera uma variável pública num módulo padrão, qualquer outra parte do programa obtém o mesmo valor se ler essa variável. Em contraste, os dados do objeto existem separadamente para cada objeto instantâneo. Outra diferença é que, ao contrário dos módulos padrão, as classes podem implementar interfaces. Se uma classe for marcada com o modificador MustInherit , não pode ser instantânea diretamente. No entanto, ainda é diferente de um módulo, pois pode ser herdado enquanto os módulos não podem ser herdados.

Nota

Quando o Shared modificador é aplicado a um membro da classe, está associado à própria classe em vez de um caso particular da classe. O membro é acedido diretamente usando o nome da classe, da mesma forma que os membros do módulo são acedidos.

As aulas e os módulos também utilizam diferentes âmbitos para os seus membros. Os membros definidos dentro de uma classe são examinados numa instância específica da classe e existem apenas para o tempo de vida do objeto. Para aceder a membros de classe de fora de uma classe, deve utilizar nomes totalmente qualificados no formato de Objeto. Membro.

Por outro lado, os membros declarados dentro de um módulo são acessíveis ao público por padrão, e podem ser acedidos por qualquer código que possa aceder ao módulo. Isto significa que as variáveis num módulo padrão são efetivamente variáveis globais porque são visíveis de qualquer lugar do seu projeto, e existem para a vida do programa.

Reutilização de classes e objetos

Os objetos permitem declarar variáveis e procedimentos uma vez e depois reutilizá-los sempre que necessário. Por exemplo, se pretender adicionar um verificador ortográfico a uma aplicação, pode definir todas as variáveis e funções de suporte para fornecer funcionalidades de verificação ortográfica. Se criar o seu verificador ortográfico como classe, pode então reutilizá-lo noutras aplicações adicionando uma referência ao conjunto compilado. Melhor ainda, pode ser capaz de poupar algum trabalho usando uma aula de verificação ortográfica que outra pessoa já desenvolveu.

.NET fornece muitos exemplos de componentes que estão disponíveis para uso. O exemplo a seguir utiliza a TimeZone classe no espaço de System nomes. TimeZone fornece membros que lhe permitem obter informações sobre o fuso horário do sistema informático atual.

Public Sub ExamineTimeZone()
    Dim tz As System.TimeZone = System.TimeZone.CurrentTimeZone
    Dim s As String = "Current time zone is "
    s &= CStr(tz.GetUtcOffset(Now).Hours) & " hours and "
    s &= CStr(tz.GetUtcOffset(Now).Minutes) & " minutes "
    s &= "different from UTC (coordinated universal time)"
    s &= vbCrLf & "and is currently "
    If tz.IsDaylightSavingTime(Now) = False Then s &= "not "
    s &= "on ""summer time""."
    Console.WriteLine(s)
End Sub

No exemplo anterior, o primeiro Dim Statement declara uma variável de tipo TimeZone de objeto e atribui-lhe um TimeZone objeto devolvido pela CurrentTimeZone propriedade.

Relacionamentos entre objetos

Os objetos podem estar relacionados entre si de várias maneiras. Os principais tipos de relacionamento são hierárquicos e contenção.

Relação hierárquica

Quando as aulas são derivadas de classes mais fundamentais, dizem que têm uma relação hierárquica. As hierarquias de classe são úteis ao descrever itens que são um subtipo de uma classe mais geral.

No exemplo seguinte, suponha que você quer definir um tipo especial de Button que age como um normal Button , mas também expõe um método que inverte as cores de primeiro plano e de fundo.

Definir uma classe que é derivada de uma classe já existente

  1. Utilize uma Declaração de Classe para definir uma classe a partir da qual criar o objeto de que necessita.

    Public Class ReversibleButton
    

    Certifique-se de que uma End Class declaração segue a última linha de código da sua turma. Por padrão, o ambiente de desenvolvimento integrado (IDE) gera automaticamente uma End Class quando introduz uma Class declaração.

  2. Acompanhe imediatamente a Class declaração com uma Declaração Herdada. Especifique a classe a partir da qual a sua nova classe deriva.

    Inherits System.Windows.Forms.Button
    

    A sua nova classe herda todos os membros definidos pela classe base.

  3. Adicione o código para os membros adicionais que a sua classe derivada expõe. Por exemplo, pode adicionar um ReverseColors método, e a sua classe derivada pode parecer o seguinte:

    Public Class ReversibleButton
        Inherits System.Windows.Forms.Button
            Public Sub ReverseColors()
                Dim saveColor As System.Drawing.Color = Me.BackColor
                Me.BackColor = Me.ForeColor
                Me.ForeColor = saveColor
           End Sub
    End Class
    

    Se criar um objeto a ReversibleButton partir da classe, pode aceder a todos os membros da Button classe, bem como ao método e a ReverseColors quaisquer outros novos membros que defina em ReversibleButton.

As classes derivadas herdam os membros da classe em que se baseiam, permitindo-lhe adicionar complexidade à medida que progride numa hierarquia de classe. Para mais informações, consulte o Básico da Herança.

Compilar o código

Certifique-se de que o compilador pode aceder à classe a partir da qual pretende obter a sua nova classe. Isto pode significar qualificar totalmente o seu nome, como no exemplo anterior, ou identificar o seu espaço de nome numa Declaração de Importações (.NET Namespace and Type). Se a aula estiver num projeto diferente, talvez precise adicionar uma referência a esse projeto. Para mais informações, consulte Managing references in a project.

Relação de contenção

Outra forma de os objetos poderem estar relacionados é uma relação de contenção. Os objetos do recipiente englobam logicamente outros objetos. Por exemplo, o OperatingSystem objeto logicamente contém um Version objeto, que retorna através da sua Version propriedade. Note que o objeto do recipiente não contém fisicamente nenhum outro objeto.

Coleções

Um tipo particular de contenção de objetos é representado por coleções. Coleções são grupos de objetos semelhantes que podem ser enumerados. Visual Basic suporta uma sintaxe específica no For Each... Próxima Declaração que lhe permite iterar através dos itens de uma coleção. Além disso, as coleções permitem frequentemente que você use um Item[] para recuperar elementos pelo seu índice ou associando-os a uma corda única. As coleções podem ser mais fáceis de usar do que as matrizes porque permitem adicionar ou remover itens sem usar índices. Devido à sua facilidade de utilização, as coleções são frequentemente usadas para armazenar formulários e controlos.

Walkthrough: Definição de aulas
Fornece uma descrição passo a passo de como criar uma classe.

Propriedades e métodos sobrecarregados
Propriedades e métodos sobrecarregados

Fundamentos básicos da herança
Abrange modificadores de heranças, métodos e propriedades dominantes, MyClass e MyBase.

Vida útil do objeto: como os objetos são criados e destruídos
Discute a criação e eliminação de instâncias de classe.

Tipos Anónimos
Descreve como criar e usar tipos anónimos, que lhe permitem criar objetos sem escrever uma definição de classe para o tipo de dados.

Inicializadores de objetos: Tipos nomeados e anónimos
Discute os inicializadores de objetos, que são usados para criar casos de tipos nomeados e anónimos usando uma única expressão.

Como: Inferir nomes e tipos de propriedade em declarações de tipo anónimo
Explica como inferir nomes e tipos de propriedade em declarações de tipo anónimo. Fornece exemplos de inferência bem sucedida e mal sucedida.