Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Um objeto é uma combinação de código e dados que pode ser tratada 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.
Quando você cria 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 dentro de seu aplicativo 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 o reutilize repetidamente.
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, propriedades, procedimentos e 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 cortadores de cookies e cookies. O cortador de biscoitos é a classe. 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 a partir de uma classe
Determine a partir 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 instrução Dim 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 New Operator para inicializar a variável em uma nova instância da classe.
Dim nextCustomer As New Customer
Agora você pode acessar os membros da classe através da variável de objeto.
nextCustomer.AccountNumber = lastAccountNumber + 1
Observação
Sempre que possível, você deve declarar a variável como sendo do tipo de classe que você pretende atribuir a ela. A isto chama-se vinculação antecipada. Se você não souber o tipo de classe em tempo de compilação, poderá invocar a vinculação tardia declarando a variável como sendo do Tipo de Dados do Objeto. No entanto, a vinculaçã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.
Múltiplas instâncias
Os objetos recém-criados a partir de uma classe geralmente são idênticos entre si. Uma vez que eles existem 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 capacidades (propriedades, variáveis, procedimentos e eventos) definidas pela classe. No entanto, cada um tem seu próprio nome, pode ser habilitado e desativado 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 Membros
Você acede a um membro de um objeto especificando, por ordem, o nome da variável do objeto, um ponto (.
) e o nome do membro. O exemplo a seguir define a Text propriedade de um Label objeto.
warningLabel.Text = "Data not saved"
Lista de membros do IntelliSense
O IntelliSense lista os membros de uma classe quando você invoca sua opção List Members (Membros da lista), por exemplo, quando você digita um ponto (.
) 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 período após o próprio nome da classe, o IntelliSense listará todos os membros compartilhados e nenhum dos membros da instância. Para obter mais informações, consulte 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 forma 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 membro.
Utilize 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.
A definição do valor causa alguma alteração percetível no estado do objeto, como uma
IsVisible
propriedade.A definição da propriedade causa alterações em outras variáveis internas ou nos valores de outras propriedades.
Um conjunto de etapas deve ser executado antes de a propriedade poder ser definida ou recuperada.
Use campos quando:
O valor é de um tipo auto-validado. Por exemplo, ocorre um erro ou conversão automática de dados se um valor diferente de
True
ouFalse
for atribuído aBoolean
variável.Qualquer valor no intervalo suportado pelo tipo de dados é válido. Isto é verdade 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.
Sugestão
Mantenha sempre os campos não constantes privados. Quando quiser tornar algo visível, utilize uma propriedade.
Metodologia
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 que é exposto por um objeto.
Para obter mais informações, consulte Procedimentos.
Eventos
Um evento é uma ação reconhecida por um objeto, como clicar com o mouse ou pressionar uma tecla, e para a qual você pode escrever código para responder. Os eventos podem ocorrer como resultado de uma ação do usuário ou código de programa, ou podem ser causados pelo sistema. Diz-se que o código que sinaliza um evento gera o evento, e diz-se que o código que responde a ele trata do mesmo.
Você também pode desenvolver seus próprios eventos personalizados para serem gerados por seus objetos e manipulados por outros objetos. Para obter mais informações, consulte Eventos.
Membros da instância e membros partilhados
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 Shared 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 da 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 qualquer instância em particular. Um membro compartilhado existe apenas uma vez, não importa quantas instâncias de sua classe você crie, 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 todo o código que pode acessar a classe.
Acesso a membros não partilhados
Verifique se o objeto foi criado a partir de sua classe e atribuído a uma variável de objeto.
Dim secondForm As New System.Windows.Forms.Form
Na instrução que acede ao membro, siga o nome da variável de objeto com o operador de acesso ao membro (
.
) e depois o nome do membro.secondForm.Show()
Aceder a membros partilhados
Siga o nome da classe com o operador de acesso de membro (
.
) e depois o nome do membro. Você sempre deve acessar umShared
membro do objeto diretamente através do nome da classe.Console.WriteLine("This computer is called " & Environment.MachineName)
Se você já criou um objeto da classe, você pode alternativamente acessar 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 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, é diferente de um módulo, uma vez que pode ser herdado, enquanto os módulos não podem ser herdados.
Observação
Quando o Shared
modificador é aplicado a um membro da 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 os seus membros. Os membros definidos dentro de 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 dentro de um módulo são acessíveis publicamente 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 toda a vida do programa.
Reutilizando classes e objetos
Os objetos permitem declarar variáveis e procedimentos uma vez e, em seguida, 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 a funcionalidade de verificação ortográfica. Se você criar seu verificador ortográfico como uma classe, poderá reutilizá-lo em outros aplicativos adicionando uma referência ao assembly compilado. Melhor ainda, você pode ser capaz de salvar a si mesmo algum trabalho usando uma classe de verificador ortográfico que outra pessoa já desenvolveu.
O .NET fornece muitos exemplos de componentes que estão disponíveis para uso. O exemplo a seguir usa a classe TimeZone no namespace System. TimeZone Fornece membros que permitem obter informações sobre o fuso horário do sistema de computador 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, a primeira declaração Dim declara uma variável de objeto do tipo TimeZone e atribui a ela um objeto TimeZone retornado pela propriedade CurrentTimeZone.
Relações entre objetos
Os objetos podem ser relacionados entre si de várias maneiras. Os principais tipos de relacionamento são hierárquico e de contenção.
Relação hierárquica
Quando as classes derivam de classes mais fundamentais, diz-se 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 a seguir, suponha que queira definir um tipo especial de Button que age como Button normal, mas também expõe um método que inverte as cores do primeiro plano e do fundo.
Definir uma classe derivada de uma classe já existente
Use uma instrução de classe para definir uma classe a partir da qual criar o objeto que você precisa.
Public Class ReversibleButton
Certifique-se de que uma
End Class
instrução siga a última linha de código da sua classe. Por padrão, o ambiente de desenvolvimento integrado (IDE) gera automaticamente umEnd Class
quando você insere umaClass
instrução.Siga a
Class
declaração imediatamente com uma Declaração de Herança. 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 a partir da classe
ReversibleButton
, ele poderá acessar todos os membros da classe Button, bem como o métodoReverseColors
e quaisquer outros novos membros que definir emReversibleButton
.
As classes derivadas herdam membros da classe em que se baseiam, permitindo que você adicione complexidade à medida que progride em uma hierarquia de classe. Para obter mais informações, consulte Noções básicas sobre herança.
Compilar o código
Certifique-se de que o compilador possa acessar a classe da qual você pretende derivar sua nova classe. Isso pode significar definir completamente seu nome, como no exemplo anterior, ou identificar seu namespace em uma instrução Imports (.NET Namespace and Type). 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 contenção
Outra maneira pela qual os objetos podem ser relacionados é uma relação de contenção. Os 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 container 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 Para cada um... Próxima instrução que permite iterar através dos itens de uma coleção. Além disso, as coleções geralmente permitem que você use um Item[] para recuperar elementos por seu índice ou associando-os a uma cadeia de caracteres exclusiva. As coleções podem ser mais fáceis de usar do que matrizes porque permitem adicionar ou remover itens sem usar índices. Devido à sua facilidade de uso, as coleções são frequentemente 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 sobre herança
Abrange modificadores de herança, sobrepondo 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 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 de propriedades e tipos em declarações de tipos anónimos
Explica como inferir nomes de propriedade e tipos em declarações de tipo anônimas. Fornece exemplos de inferência bem-sucedida e malsucedida.