Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Um objeto é uma combinação de código e dados que podem ser tratados como uma unidade. Um objeto pode ser uma parte de um aplicativo, como um controle ou um formulário. Um aplicativo inteiro também pode ser um objeto.
Ao criar um aplicativo no Visual Basic, você trabalha constantemente com objetos. Você pode usar objetos fornecidos pelo Visual Basic, como controles, formulários e objetos de acesso a dados. Você também pode usar objetos de outros aplicativos em seu aplicativo do Visual Basic. Você pode até mesmo criar 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. Eles permitem que você escreva um pedaço de código uma vez e reutilize-o várias vez.
Este tópico discute objetos em detalhes.
Objetos e classes
Cada objeto no Visual Basic é definido por uma classe. Uma classe descreve as variáveis, as propriedades, os procedimentos e os eventos de um objeto. Objetos são instâncias de classes; você pode criar quantos objetos precisar depois de definir uma classe.
Para entender a relação entre um objeto e sua classe, pense em cookies e cortadores de cookie. O cortador de cookie é a classe. Ele define as características de cada cookie, por exemplo, tamanho e forma. A classe é usada para criar objetos. Os objetos são os cookies.
Você deve criar um objeto antes de poder acessar seus membros, exceto para Shared
membros que podem ser acessados sem um objeto da classe.
Criar um objeto com base em uma classe
Determine de qual classe você deseja criar um objeto ou defina sua própria classe. Por exemplo:
Public Class Customer Public Property AccountNumber As Integer End Class
Escreva uma Dim Statement para criar uma variável à qual você pode atribuir uma instância de classe. A variável deve ser do tipo da classe desejada.
Dim nextCustomer As Customer
Adicione a palavra-chave Novo Operador para inicializar a variável a uma nova instância da classe.
Dim nextCustomer As New Customer
Agora você pode acessar os membros da classe por meio da variável de objeto.
nextCustomer.AccountNumber = lastAccountNumber + 1
Observação
Sempre que possível, você deve declarar a variável como do tipo de classe que pretende atribuir a ela. Isso é chamado de ligação antecipada. Se você não souber o tipo de classe no momento da compilação, poderá invocar a associação tardia declarando que a variável é do Tipo de Dados de Objeto. No entanto, a associação tardia pode tornar o desempenho mais lento e limitar o acesso aos membros do objeto em tempo de execução. Para obter mais informações, consulte Declaração de Variável de Objeto.
Várias instâncias
Objetos recém-criados a partir de uma classe geralmente são idênticos uns aos outros. Uma vez que eles existam como objetos individuais, no entanto, suas variáveis e propriedades podem ser alteradas independentemente das outras instâncias. Por exemplo, se você adicionar três caixas de seleção a um formulário, cada objeto de caixa de seleção será uma instância da CheckBox classe. Os objetos individuais CheckBox compartilham um conjunto comum de características e funcionalidades (propriedades, variáveis, procedimentos e eventos) definidos pela classe. No entanto, cada um tem seu próprio nome, pode ser habilitado e desabilitado separadamente e pode ser colocado em um local diferente no formulário.
Membros do objeto
Um objeto é um elemento de um aplicativo, representando uma instância de uma classe. Campos, propriedades, métodos e eventos são os blocos de construção de objetos e constituem seus membros.
Acesso de membro
Você acessa um membro de um objeto especificando, em ordem, o nome da variável de 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"
Listagem do IntelliSense de membros
O IntelliSense lista os membros de uma classe quando você invoca sua opção de membros da lista, por exemplo, ao digitar um ponto final (.
) como um operador de acesso de membro. Se você digitar o período após o nome de uma variável declarada como uma instância dessa classe, o IntelliSense listará todos os membros da instância e nenhum dos membros compartilhados. Se você digitar o ponto final após o nome da classe, o IntelliSense listará todos os membros compartilhados e nenhum dos membros de instância. Para obter mais informações, veja Usando o IntelliSense.
Campos e propriedades
Campos e propriedades representam informações armazenadas em um objeto. Você recupera e define seus valores com instruções de atribuição da mesma maneira que recupera e define variáveis locais em um procedimento. O exemplo a seguir 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
Observe que um campo também é chamado de variável de membro.
Use os procedimentos de propriedade quando:
Você precisa controlar quando e como um valor é definido ou recuperado.
A propriedade tem um conjunto bem definido de valores que precisam ser validados.
Definir o valor causa alguma alteração perceptível no estado do objeto, como uma
IsVisible
propriedade.Definir a propriedade causa alterações em outras variáveis internas ou nos valores de outras propriedades.
Antes que a propriedade possa ser configurada ou acessada, é necessário executar um conjunto de etapas.
Use campos quando:
O valor for de um tipo de validação automática. Por exemplo, um erro ou conversão automática de dados ocorre se um valor diferente
True
ouFalse
é atribuído a umaBoolean
variável.Qualquer valor no intervalo compatível com o tipo de dados é válido. Isso é verdadeiro para muitas propriedades do tipo
Single
ouDouble
.A propriedade é um
String
tipo de dados e não há nenhuma restrição sobre o tamanho ou o valor da cadeia de caracteres.Para obter mais informações, consulte Procedimentos de Propriedade.
Dica
Sempre mantenha os campos não constantes privados. Quando você quiser torná-la pública, use uma propriedade.
Métodos
Um método é uma ação que um objeto pode executar. 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()
Observe que um método é simplesmente um procedimento exposto por um objeto.
Para obter mais informações, consulte Procedures.
Eventos
Um evento é uma ação reconhecida por um objeto, como clicar no mouse ou pressionar uma chave e para o qual você pode escrever código para responder. Os eventos podem ocorrer como resultado de uma ação do usuário ou do código do programa ou podem ser causados pelo sistema. O código que sinaliza um evento é considerado gerar o evento, e o código que responde a ele é considerado manipular ele.
Você também pode desenvolver seus próprios eventos personalizados a serem gerados por seus objetos e manipulados por outros objetos. Para obter mais informações, consulte Eventos.
Membros de instância e membros compartilhados
Quando você cria um objeto de uma classe, o resultado é uma instância dessa classe. Os membros que não são declarados com a palavra-chave Compartilhado são membros de instância, que pertencem estritamente a essa instância específica. Um membro de instância em uma instância é independente do mesmo membro em outra instância da mesma classe. Uma variável de membro de instância, por exemplo, pode ter valores diferentes em instâncias diferentes.
Os membros declarados com a Shared
palavra-chave são membros compartilhados, que pertencem à classe como um todo e não a nenhuma instância específica. Um membro compartilhado existe apenas uma vez, independentemente de quantas instâncias de sua classe você criar ou mesmo se você não criar instâncias. Uma variável de membro compartilhado, por exemplo, tem apenas um valor, que está disponível para todos os códigos que podem acessar a classe.
Acessando membros não compartilhados
Verifique se o objeto foi criado de sua classe e atribuído a uma variável de objeto.
Dim secondForm As New System.Windows.Forms.Form
Na instrução que acessa o membro, siga o nome de variável de objeto com o operador de acesso de membro (
.
) e, em seguida, o nome do membro.secondForm.Show()
Acessando os membros compartilhados
Siga o nome da classe com o operador de acesso de membro (
.
) e, em seguida, o nome do membro. Você sempre deve acessar umShared
membro do objeto diretamente por meio do nome da classe.Console.WriteLine("This computer is called " & Environment.MachineName)
Se você já tiver criado um objeto da classe, poderá acessar um
Shared
membro por meio 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 instanciadas 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 programa altera uma variável pública em um módulo padrão, qualquer outra parte do programa obtém o mesmo valor se ler essa variável. Por outro lado, os dados do objeto existem separadamente para cada objeto instanciado. Outra diferença é que, ao contrário dos módulos padrão, as classes podem implementar interfaces. Se uma classe estiver marcada com o modificador MustInherit , ela não poderá ser instanciada diretamente. No entanto, ele ainda é diferente de um módulo, pois pode ser herdado enquanto os módulos não podem ser herdados.
Observação
Quando o Shared
modificador é aplicado a um membro de classe, ele é associado à própria classe em vez de uma instância específica da classe. O membro é acessado diretamente usando o nome da classe, da mesma forma que os membros do módulo são acessados.
Classes e módulos também usam escopos diferentes para seus membros. Os membros definidos em uma classe têm escopo dentro de uma instância específica da classe e existem apenas para o tempo de vida do objeto. Para acessar membros de classe de fora de uma classe, você deve usar nomes totalmente qualificados no formato de Objeto. Membro.
Por outro lado, os membros declarados em um módulo são publicamente acessíveis por padrão e podem ser acessados por qualquer código que possa acessar o módulo. Isso significa que as variáveis em um módulo padrão são efetivamente variáveis globais porque são visíveis de qualquer lugar em seu projeto e existem durante a vida útil do programa.
Reutilizando classes e objetos
Os objetos permitem declarar variáveis e procedimentos uma vez e reutilizá-los sempre que necessário. Por exemplo, se você quiser adicionar um verificador ortográfico a um aplicativo, poderá definir todas as variáveis e funções de suporte para fornecer funcionalidade de verificação ortográfica. Se você criar o verificador ortográfico como uma classe, poderá reutilizá-lo em outros aplicativos adicionando uma referência ao assembly compilado. Melhor ainda, talvez você possa poupar trabalho usando uma classe de verificador ortográfico que outra pessoa já tenha desenvolvido.
O .NET fornece muitos exemplos de componentes disponíveis para uso. O exemplo a seguir usa a TimeZone classe no System namespace. TimeZone fornece membros que permitem que você recupere informações sobre o fuso horário do sistema atual do computador.
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 Demonstrativo Esmaecido declara uma variável de objeto do tipo TimeZone e atribui a ele um objeto TimeZone retornado pela propriedade CurrentTimeZone.
Relações entre objetos
Objetos podem estar relacionados uns aos outros de várias maneiras. Os tipos principais de relação são hierárquicos e de contenção.
Relação hierárquica
Quando as classes são derivadas de classes mais fundamentais, dizem que elas têm uma relação hierárquica. Hierarquias de classe são úteis ao descrever itens que são um subtipo de uma classe mais geral.
No exemplo a seguir, suponha que você queira definir um tipo Button especial que age como um normal Button , mas também expõe um método que inverte as cores de primeiro plano e de plano de fundo.
Definir uma classe derivada de uma classe já existente
Use uma Instrução de Classe para definir uma classe da qual criar o objeto necessário.
Public Class ReversibleButton
Certifique-se de que uma instrução
End Class
siga a última linha de código em sua classe. Por padrão, o IDE (ambiente de desenvolvimento integrado) gera automaticamente umEnd Class
quando você insere umaClass
instrução.Siga a instrução
Class
imediatamente com uma instrução Inherits. Especifique a classe da qual sua nova classe deriva.Inherits System.Windows.Forms.Button
Sua nova classe herda todos os membros definidos pela classe base.
Adicione o código para os membros adicionais que sua classe derivada expõe. Por exemplo, você pode adicionar um
ReverseColors
método e sua classe derivada pode ter a seguinte aparência: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 você criar um objeto da
ReversibleButton
classe, ele poderá acessar todos os membros da Button classe, bem como oReverseColors
método e quaisquer outros novos membros que você definir.ReversibleButton
Classes derivadas herdam membros da classe em que se baseiam, permitindo que você adicione complexidade à medida que avança em uma hierarquia de classes. Para obter mais informações, consulte Noções básicas de herança.
Compilar o código
Verifique se o compilador pode acessar a classe da qual você pretende derivar sua nova classe. Isso pode significar qualificar totalmente seu nome, como no exemplo anterior, ou identificar seu namespace em uma Instrução Imports (Tipo e Namespace .NET). Se a classe estiver em um projeto diferente, talvez seja necessário adicionar uma referência a esse projeto. Para obter mais informações, consulte Gerenciando referências em um projeto.
Relação de confinamento
Outra maneira que os objetos podem ser relacionados é uma relação de contenção. Objetos de contêiner encapsulam logicamente outros objetos. Por exemplo, o OperatingSystem objeto contém logicamente um Version objeto, que ele retorna por meio de sua Version propriedade. Observe que o objeto contêiner não contém fisicamente nenhum outro objeto.
Coleções
Um tipo específico de contenção de objeto é representado por coleções. Coleções são grupos de objetos semelhantes que podem ser enumerados. O Visual Basic dá suporte a uma sintaxe específica na instrução For Each...Next que permite que você itere pelos itens de uma coleção. Além disso, as coleções permitem, com frequência, que você use um Item[] para recuperar elementos pelo índice ou associando-os com uma cadeia de caracteres exclusiva. As coleções podem ser mais fáceis de usar do que as matrizes, pois permitem adicionar ou remover itens sem usar índices. Devido à facilidade de uso, as coleções geralmente são usadas para armazenar formulários e controles.
Tópicos relacionados
Passo a passo: definindo classes
Fornece uma descrição passo a passo de como criar uma classe.
Propriedades e métodos sobrecarregados
Propriedades e métodos sobrecarregados
Noções básicas de herança
Aborda modificadores de herança, substituindo métodos e propriedades, MyClass e MyBase.
Tempo de vida do objeto: como os objetos são criados e destruídos
Discute a criação e a eliminação de instâncias de classe.
Tipos anônimos
Descreve como criar e usar tipos anônimos, que permitem criar objetos sem escrever uma definição de classe para o tipo de dados.
Inicializadores de objeto: tipos nomeados e anônimos
Discute inicializadores de objeto, que são usados para criar instâncias 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 malsucedida.