Programação orientada a objeto (C# e Visual Basic)
Todas as linguagens gerenciadas no.NET Framework, como Visual Basic e C#, oferecem suporte completo para programação orientada a objeto, incluindo o 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 um objeto.
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 intercambiavelmente, mesmo que cada classe implemente as mesmas propriedades ou métodos de maneiras diferentes.
Esta seção descreve os seguintes conceitos:
Classes e objetos
Membros de classe
Propriedades e campos
Métodos
Construtores
Destruidores
Eventos
Classes aninhadas
Modificadores de acesso e níveis de acesso
Instanciação de Classes
Estático (compartilhado) Classes e membros
Tipos anônimos
Herança
- Substituindo membros
Interfaces
Genéricos
Delegados
Classes e objetos
Os termos classe e objeto Algumas vezes são usados alternadamente, mas na verdade, as classes descrevem o tipo de objetos, enquanto objetos são utilizáveis instâncias de classes.Portanto, o ato de criar um objeto é chamado instanciação.Usando a analogia da planta, uma classe é um projeto e um objeto é a construção feita daquela planta.
Para definir uma classe:
Classe SampleClass final
classe {SampleClass}
Visual Basic e C# também fornecem uma versão light de classes chamado estruturas que são úteis quando você precisa criar a grande variedade de objetos e não deseja consumir muita memória para isso.
Para definir uma estrutura:
Estrutura SampleStructure End Structure
struct {SampleStruct}
Para obter mais informações, consulte:
Visual Basic
C#
Membros de classe
Cada classe pode ter diferentes membros de classe que incluem propriedades que descrevem dados de classe, métodos que definem o comportamento da classe e eventos que fornecem comunicação entre diferentes classes e objetos.
Propriedades e campos
Campos e propriedades representam informações que contém um objeto.Campos são como variáveis, porque pode ser lido ou definir diretamente.
Para definir um campo:
Classe SampleClass Public SampleField como String End Class
Classe SampleClass {public string sampleField; }
Propriedades tem obter e definir procedimentos, que fornecem maior controle sobre como os valores são definidos ou retornados.
C# e Visual Basic permitem que você criar um campo particular para armazenar o valor da propriedade ou usar as Propriedades autoimplementadas que cria esse campo automaticamente nos bastidores e fornecem a lógica básica para os procedimentos de propriedade.
Para definir uma propriedade implementada automaticamente:
Classe SampleClass Public propriedade SampleProperty como String End Class
classe SampleClass {public int SampleProperty {get; conjunto; } }
Se você precisar executar algumas operações adicionais para ler e gravar o valor da propriedade, definir um campo para armazenar o valor da propriedade e fornecer a lógica básica para armazenar e recuperá-los:
Classe Samplelass particular m_Sample como String pública Property Sample() como String Get ' Retorne o valor armazenado no campo. Retornar m_Sample End Get Set(ByVal Value As String) ' Armazene o valor no campo. m_Sample = valor End Set End propriedade End Class
classe SampleClass {private int _sample; Public int exemplo {/ / retornar o valor armazenado em um campo. Get {return _sample; } / / Armazena o valor no campo. Definir {_sample = valor; } } }
A maioria das propriedades possuem métodos ou procedimentos para definir e obter o valor da propriedade.No entanto, você pode criar propriedades somente leitura ou somente leitura para impedir que eles sejam modificadas ou lidas.No Visual Basic você pode usar Somente leitura e WriteOnly palavras-chave.Em C#, você pode omitir o Get ou conjunto método de propriedade.No entanto, no Visual Basic e C#, Propriedades autoimplementadas não podem ser somente leitura ou somente gravação.
Para obter mais informações, consulte:
Visual Basic
C#
Métodos
A método é uma ação que um objeto pode executar.
Observação |
---|
No Visual Basic, existem duas maneiras de criar um método: o Sub declaração é usada se o método não retornar um valor; o Função declaração é usada se um método retorna um valor. |
Para definir um método de uma classe:
Classe SampleClass Public função SampleFunc (ByVal SampleParam As String) ' Adicionar código aqui final função End Class
classe SampleClass {int public sampleMethod (cadeia de caracteres sampleParam) {/ / inserir o código aqui}}
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âmetro.
Para sobrecarregar um método:
Overloads Sub Display(ByVal theChar As Char) ' Adicione o código que exibe dados de Char. End Sub Overloads Sub Display(ByVal theInteger As Integer) ' Adicione o código que exibe dados de número inteiro. End Sub
{} sampleMethod (sampleParam de seqüência de caracteres) do int pública; {} Public int a sampleMethod (int sampleParam)
Na maioria dos casos você deve declarar um método dentro de uma definição de classe.No entanto, Visual Basic e C# também suporta métodos de extensão que permitem que você adicionar métodos a uma classe existente fora da definição real da classe.
Para obter mais informações, consulte:
Visual Basic
C#
Construtores
Construtores são métodos de classe que são executados automaticamente quando um objeto de um determinado tipo é criado.Construtores geralmente inicializar os membros do novo objeto de dados.Um construtor pode ser executado apenas uma vez quando uma classe é criada.Além disso, o código no construtor é executado sempre antes de qualquer outro código em uma classe.No entanto, você pode criar várias sobrecargas de construtor da mesma maneira que qualquer outro método.
Para definir um construtor para uma classe:
Classe SampleClass Sub New(ByVal s As String) / / adicionar código aqui. End Sub End Class
public class SampleClass {public SampleClass() {/ / adicionar código aqui}}
Para obter mais informações, consulte:
Visual Basic
C#
Destruidores
Destrutores são usados para destruct 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 no seu aplicativo.No entanto, talvez ainda seja necessário usar destruidores para limpar os recursos não gerenciados que seu aplicativo cria.Pode haver apenas um destruidor de uma classe.
Para obter mais informações sobre destruidores e coleta de lixo no.NET Framework, consulte Coleta de Lixo.
Eventos
Eventos permitem que uma classe ou objeto para notificar outras classes ou objetos quando algo interessante ocorre.A classe que envia (ou gera) o evento é chamada de Publisher e as classes que recebem (ou manipulam) os eventos são chamadas assinantes.Para obter mais informações sobre eventos, como eles são gerados e tratados, consulte Tratamento e disparada de eventos.
Visual Basic
Para declarar eventos, use o Declaração de evento.
Para gerar eventos, use o Instrução RaiseEvent.
Para especificar os manipuladores de eventos usando uma forma declarativa, use o WithEvents (Visual Basic) instrução e o Cláusula Handles (Visual Basic) cláusula.
Para poder adicionar, remover e alterar o manipulador de eventos associado a um evento dinamicamente, use o Instrução AddHandler e Instrução RemoveHandler junto com o Operador AddressOf (Visual Basic).
C#
Para declarar um evento em uma classe, use o evento (referência de C#) palavra-chave.
Para elevar um evento, chame o representante de evento.
Para inscrever-se a um evento, use o += operador; Para cancelar a assinatura de um evento, use o -= operador.
Classes aninhadas
É chamada de uma classe definida dentro de outra classe aninhados.Por padrão, a classe aninhada é particular.
Classe classe de contêiner aninhado ' Adicione o código aqui. End end classe
classe Container {classe Nested {/ / adiciona o código aqui. } }
Para criar uma instância da classe aninhada, use o nome da classe de contêiner, seguido do ponto e, em seguida, seguido do nome da classe aninhada:
Dim nestedInstance como Container.Nested = Container.Nested() novo
Container.Nested nestedInstance = Container.Nested() novo
Modificadores de acesso e níveis de acesso
Todas as classes e membros de classe podem especificar o nível de acesso fornecem a outras classes, usando modificadores de acesso.
Os modificadores de acesso a seguir estão disponíveis:
Modificador de Visual Basic |
Modificador de C# |
Definição |
---|---|---|
O tipo ou membro pode ser acessado por qualquer outro código no mesmo assembly ou outro conjunto que faz referência a ele. |
||
O tipo ou membro só pode ser acessado pelo código na mesma classe. |
||
O tipo ou membro só pode ser acessado pelo código na mesma classe ou em uma classe derivada. |
||
O tipo ou membro pode ser acessado por qualquer código no mesmo assembly, mas não de outro conjunto. |
||
Amigo protegido |
protected internal |
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 em Visual Basic e Modificadores de acesso (guia de programação do C#).
Instanciação de Classes
Para criar um objeto, você precisa criar uma instância de uma classe ou criar uma instância de classe.
Dim sampleObject como SampleClass() novo
SampleClass sampleObject = new SampleClass();
Depois de criar uma instância de uma classe, você pode atribuir valores aos campos e propriedades da instância e chamar métodos da classe.
' Defina um valor de propriedade. sampleObject.SampleProperty = "Cadeia de caracteres de exemplo" ' Chame um método. sampleObject.SampleMethod()
/ / Definir um valor da propriedade. sampleObject.sampleProperty = "Exemplo de seqüência de caracteres"; / / Chamar um método. sampleObject.sampleMethod();
Para atribuir valores a propriedades durante o processo de instanciação de classe, use os inicializadores de objeto:
Dim sampleObject = SampleClass New With {.FirstProperty = "A".SecondProperty = "B"}
/ / Definir um valor da propriedade. SampleClass sampleObject = novo SampleClass {FirstProperty = "A" SecondProperty = "B" };
Para obter mais informações, consulte:
Visual Basic
C#
Estático (compartilhado) Classes e membros
Um membro estático (compartilhado no Visual Basic) da classe é um campo que é compartilhado por todas as instâncias de uma classe, procedimento ou propriedade.
Para definir o membro estático (compartilhado):
Classe SampleClass Public Shared SampleString como seqüência de caracteres = "Exemplo de String" End Class
classe estática SampleClass {public static string SampleString = "Sample String"; }
Para acessar o membro estático (compartilhado), use o nome da classe sem criar um objeto desta classe:
MsgBox(SampleClass.SampleString)
Console.WriteLine(SampleClass.SampleString);
Estáticos (compartilhados) classes em C# e módulos do Visual Basic têm estáticos (compartilhados) membros somente e não podem ser instanciados.Os membros estáticos (compartilhados) também não é possível acessar métodos, campos ou propriedades de não-estático (não compartilhada)
Para obter mais informações, consulte:
Tipos anônimos
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 possui nenhum nome utilizável e contém as propriedades que você especificar no declarar o objeto.
Para criar uma instância de um tipo anônimo:
' sampleObject é uma instância de um tipo anônimo simples. Dim sampleObject = New With {chave.FirstProperty = "A".SecondProperty = "B"}
/ / sampleObject é uma instância de um tipo anônimo simples. var sampleObject = new {FirstProperty = "A" SecondProperty = "B" };
Para obter mais informações, consulte:
Visual Basic: Tipos anônimos (Visual Basic)
Herança
Herança permite que você crie uma nova classe que reutiliza, amplia e modifica o comportamento que é definido em outra classe.A classe cujos membros são herdados é chamada a classe base, e a classe que herda os membros é chamada a classe derivada.No entanto, todas as classes em C# e Visual Basic implicitamente herdam o Object classe que oferece suporte a hierarquia de classes do .NET e fornece serviços de baixo nível para todas as classes.
Observação |
---|
Linguagens gerenciadas no.NET Framework não oferecem suporte a herança múltipla, eu.e. você pode especificar apenas uma classe base para uma classe derivada. |
Para herdar de uma classe base:
Classe DerivedClass herda a classe BaseClass final
classe {DerivedClass:BaseClass}
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 cria uma classe que pode ser usada como apenas uma classe base.
Para especificar que uma classe não pode ser usada como uma classe base:
Classe NotInheritable SampleClass End Class
Public sealed {} de classe a
Para especificar que uma classe pode ser usada como uma classe base somente e não pode ser instanciada:
Classe MustInherit BaseClass End Class
{} a classe abstrata pública b
Para obter mais informações, consulte:
Visual Basic
C#
Substituindo membros
Por padrão, uma classe derivada herda todos os membros de sua classe base.Se você desejar 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 seguintes modificadores são usados para controlar como as propriedades e métodos são substituídos:
Modificador de Visual Basic |
Modificador de C# |
Definição |
---|---|---|
Permite que um membro da classe a ser substituído em uma classe derivada. |
||
Substitui um membro (substituível) virtual definido na classe base. |
||
Não há suporte para |
Impede que um membro que está sendo substituído em uma classe herdeira. |
|
Requer que um membro da classe a ser substituído na classe derivada. |
||
Oculta um membro herdado de uma classe base |
Interfaces
Interfaces, como classes, definem um conjunto de propriedades, métodos e eventos.Mas, diferentemente das classes, interfaces não fornecem implementação.Eles são implementados por classes e definidos como entidades separadas das classes.Uma interface representa um contrato em que uma classe que implementa uma interface deve implementar todos os aspectos da interface exatamente como ele é definido.
Para definir uma interface:
Interface pública Sub ISampleInterface DoSomething() End Interface
interface ISampleInterface {void doSomething(); }
Para implementar uma interface em uma classe:
Classe SampleClass implementa ISampleInterface Sub doSomething ' Implementação do método. End Sub End Class
classe SampleClass: ISampleInterface {void ISampleInterface.SampleMethod() {/ / implementação do método. } }
Para obter mais informações, consulte:
Visual Basic
C#
Genéricos
Classes, estruturas, interfaces e métodos do.NET Framework pode parâmetros de tipo que definem os tipos de objetos que 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:
Campo público de SampleGeneric (Of T) de classe como T End Class
Public class SampleGeneric <T> {Campo público de T; }
Para criar uma instância de uma classe genérica:
Dim sampleObject como nova SampleGeneric(Of String) sampleObject.Field = "Cadeia de caracteres de exemplo"
SampleGeneric <string> sampleObject = new () de SampleGeneric <string>; sampleObject.Field = "Exemplo de seqüência de caracteres";
Para obter mais informações, consulte:
Delegados
A 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 chamar (ou ligue) o método através do delegado.Delegados são usados para passar os métodos como argumentos para outros métodos.
Observação |
---|
Manipuladores de eventos são nada mais do que os métodos que são invocados por meio de representantes.Para obter mais informações sobre como usar delegados na manipulação de eventos, consulte Delegados e eventos. |
Para criar um delegado:
Delegar Sub SampleDelegate (ByVal str As String)
delegar a public void SampleDelegate(string str);
Para criar uma referência a um método que corresponda à assinatura especificada pelo delegado:
'Classe SampleClass Método que corresponda à assinatura de SampleDelegate. Sub SampleSub (ByVal str As String) ' Adicione o código aqui. End Sub ' Método que instancia o delegado. Sub sd Dim SampleDelegateSub() como SampleDelegate = AddressOf SampleSub sd ("cadeia de caracteres de exemplo") End Sub End Class
classe SampleClass {/ / método que corresponda à assinatura de SampleDelegate. public static void sampleMethod (mensagem de seqüência de caracteres) {/ / adiciona o código aqui. } / / Método que instancia o delegado. void SampleDelegate() {SampleDelegate sd = sampleMethod; SD ("Sample string"); } }
Para obter mais informações, consulte:
Visual Basic
C#