Programação orientada a objeto (C# e Visual Basic)
Tudo gerenciado em idiomas do.NET Framework, como, por exemplo, 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 unidade ou um objeto único.
Herança descreve a habilidade de se criarem novas classes baseadas em uma classe pré-existente.
Polimorfismo significa que você pode ter múltiplas classes que podem ser usadas intercambiavelmente, mesmo que cada classe implemente as mesmas propriedades e métodos de modos diferentes.
Esta seção descreve os seguintes conceitos:
Classes e Objetos
Membros de classe
Propriedades e campos
Métodos
Construtores
Destructors
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 de objetos, enquanto objetos são utilizáveis instâncias de classes. Portanto, o ato de criar um objeto é chamado de instanciação. Usando a analogia da planta, a classe é a planta, e o objeto é a construção feita daquela planta.
Para definir uma classe:
Class SampleClass
End Class
class SampleClass
{
}
Visual Basic e C# também fornecem uma versão light de classes chamado estruturas que são úteis quando você precisa criar uma matriz grande de objetos e não deseja consumir muita memória para que.
Para definir uma estrutura:
Structure SampleStructure
End Structure
struct SampleStruct
{
}
Para obter mais informações, consulte:
Visual Basic
C#
Membros de classe
Cada classe pode ter diferentes membros da classe que incluem propriedades que descrevem os 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 um objeto contém. Campos são como variáveis, porque eles podem ser lidos ou alterados diretamente.
Para definir um campo:
Class SampleClass
Public SampleField As String
End Class
Class SampleClass
{
public string sampleField;
}
Propriedades tem get e set procedimentos, que oferecem mais controle sobre como os valores são definidos ou retornados.
C# e Visual Basic permitem que você criar um campo privado para armazenar o valor da propriedade ou usar propriedades implementado para auto supostas que criar esse campo automaticamente em segundo plano e fornecem a lógica básica para os procedimentos de propriedade.
Para definir uma propriedade de auto-implementada:
Class SampleClass
Public Property SampleProperty as String
End Class
class SampleClass
{
public int SampleProperty { get; set; }
}
Se você precisar executar algumas operações adicionais para ler e gravar o valor de propriedade, definir um campo para armazenar o valor da propriedade e fornecer a lógica básica para armazenar e recuperar a ele:
Class Samplelass
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
class SampleClass
{
private int _sample;
public int Sample
{
// Return the value stored in a field.
get { return _sample; }
// Store the value in the field.
set { _sample = value; }
}
}
A maioria das propriedades têm métodos ou procedimentos para definir e obter o valor da propriedade. No entanto, você pode criar propriedades somente leitura ou somente gravação restringi-los contra modificação ou ler. Visual Basic você pode usar ReadOnly e WriteOnly palavras-chave. No C#, você pode omitir o get ou set método de propriedade. No entanto, em Visual Basic e C#, implementado em auto propriedades não podem ser somente leitura ou somente para 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 |
---|
Em Visual Basic, há duas maneiras para criar um método: o Sub declaração é usada se o método não retornar um valor; o Function declaraçã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
class SampleClass
{
public int sampleMethod(string sampleParam)
{
// Insert code here
}
}
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)
' Add code that displays Char data.
End Sub
Overloads Sub Display(ByVal theInteger As Integer)
' Add code that displays Integer data.
End Sub
public int sampleMethod(string sampleParam) {};
public int sampleMethod(int sampleParam) {}
Na maioria dos casos, você declara um método dentro de uma definição de classe. No entanto, Visual Basic e C# também suportam métodos de extensão que permitem que você adicione métodos para uma classe existente fora da definição real da classe.
Para obter mais informações, consulte:
Visual Basic
C#
Construtores
Construtores são os métodos de classe que são executados automaticamente quando um objeto de um determinado tipo é criado. Construtores geralmente inicializar os membros de dados do novo objeto. Um construtor pode ser executado apenas uma vez que 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 do construtor da mesma maneira que 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
public class SampleClass
{
public SampleClass()
{
// Add code here
}
}
Para obter mais informações, consulte:
Visual Basic
C#
Destructors
Destruidores são usadas para instâncias de classes de destruct. 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 na.NET Framework, consulte Coleta de Lixo.
Eventos
Eventos permitem uma classe ou objeto para notificar outras classes ou objetos quando algo interessante ocorre. A classe que envia o evento (ou gera uma) é chamada de publisher e as classes que recebem (ou manipulam) os eventos são chamadas de assinantes. Para obter mais informações sobre eventos, como eles são disparados e manipulados, consulte Tratamento e disparada de eventos.
Visual Basic
Para declarar os eventos, use o Declaração de evento.
Para elevar eventos, use o Instrução RaiseEvent.
Para especificar os manipuladores de eventos usando uma forma declarativa, use o WithEvents (Visual Basic) instrução e a 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 juntamente com o Operador AddressOf (Visual Basic).
C#
Para declarar um evento em uma classe, use o <>evento>(TRANSLATION FROM VPE FOR CSHARP Reference) palavra-chave.
Para elevar um evento, invocar o delegado do evento.
Para inscrever-se a um evento, use o += operador; Para cancelar a inscrição de um evento, use o -= operador.
Classes aninhadas
Uma classe definida dentro de outra classe é chamada de aninhadas. Por padrão, a classe aninhada é particular.
Class Container
Class Nested
' Add code here.
End Class
End Class
class Container
{
class Nested
{
// Add code here.
}
}
Para criar uma instância da classe aninhada, use o nome da classe de contêiner, seguido do ponto e, em seguida, seguido pelo nome da classe aninhada:
Dim nestedInstance As Container.Nested = New Container.Nested()
Container.Nested nestedInstance = new Container.Nested()
Modificadores de acesso e níveis de acesso
Todas as classes e membros de classe podem especificar qual nível de acesso que eles 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 a partir de outro assembly. |
||
Protected Friend |
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 C#).
Instanciação de Classes
Para criar um objeto, você precisará criar uma instância de uma classe ou criar uma instância de classe.
Dim sampleObject as New SampleClass()
SampleClass sampleObject = new SampleClass();
Após instanciar uma classe, você pode atribuir valores aos campos e as propriedades da instância e chamar métodos da classe.
' Set a property value.
sampleObject.SampleProperty = "Sample String"
' Call a method.
sampleObject.SampleMethod()
// 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 os inicializadores de objeto:
Dim sampleObject = New SampleClass With
{.FirstProperty = "A", .SecondProperty = "B"}
// Set a property value.
SampleClass sampleObject = new 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 de Visual Basic) da classe é uma propriedade, procedimento ou campo que é compartilhado por todas as instâncias de uma classe.
Para definir o membro estático (compartilhado):
Class SampleClass
Public Shared SampleString As String = "Sample String"
End Class
static class 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 C# e módulos de Visual Basic possuem membros (compartilhados) estáticos somente e não podem ser instanciados. Membros (compartilhados) estáticos também não é possível acessar métodos, campos ou propriedades do non-static (não compartilhado)
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 sem nome utilizável e contém as propriedades que você especificar no declarando 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"}
// sampleObject is an instance of a simple anonymous type.
var sampleObject =
new { FirstProperty = "A", SecondProperty = "B" };
Para obter mais informações, consulte:
Visual Basic: Tipos anônimos (Visual Basic)
C#: Tipos anônimos (guia de programação TRANSLATION FROM VPE FOR CSHARP)
Herança
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 esses membros é chamada a classe derivada. No entanto, todas as classes C# e Visual Basic implicitamente herdam o classeObject que ofereça suporte.NET a hierarquia de classe e fornece serviços de baixo nível para todas as classes.
Observação |
---|
Gerenciado em idiomas do.NET Framework não oferecem suporte a herança múltipla, isto é Você pode especificar somente uma classe base para uma classe derivada. |
Para herdar de uma classe base:
Class DerivedClass
Inherits BaseClass
End Class
class 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 uma classe base somente.
Para especificar que uma classe não pode ser usada como uma classe base:
NotInheritable Class SampleClass
End Class
public sealed class A { }
Para especificar que uma classe pode ser usada como uma classe base somente e não pode ser instanciada:
MustInherit Class BaseClass
End Class
public abstract class B { }
Para obter mais informações, consulte:
Visual Basic
C#
Substituindo membros
Por padrão, uma classe derivada herda todos os membros da sua classe base. Para alterar o comportamento do membro herdado, você precisará substituí-la. Ou seja, você pode definir uma nova implementação do método, propriedade ou evento na classe derivada.
Seguintes modificadores são usados para controlar como os métodos e propriedades são ignorados:
Modificador de Visual Basic |
Modificador de C# |
Definição |
---|---|---|
Permite que um membro de classe para ser substituído em uma classe derivada. |
||
Substitui (substituível) membro virtual definido na classe base. |
||
Sem suporte |
Impede que um membro que está sendo substituído em uma classe herdada. |
|
Requer que um membro de classe para ser substituído na classe derivada. |
||
novo Modificador (referência de TRANSLATION FROM VPE FOR CSHARP) |
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 pelas 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 ela está definida.
Para definir uma interface:
Public Interface ISampleInterface
Sub DoSomething()
End Interface
interface ISampleInterface
{
void doSomething();
}
Para implementar uma interface em uma classe:
Class SampleClass
Implements ISampleInterface
Sub doSomething
' Method implementation.
End Sub
End Class
class SampleClass : ISampleInterface
{
void ISampleInterface.SampleMethod()
{
// Method implementation.
}
}
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 sejam armazenados em uma coleção.
Para definir uma classe genérica:
Class SampleGeneric(Of T)
Public Field As T
End Class
Public class SampleGeneric<T>
{
public T Field;
}
Para criar uma instância de uma classe genérica:
Dim sampleObject As New SampleGeneric(Of String)
sampleObject.Field = "Sample string"
SampleGeneric<string> sampleObject = new SampleGeneric<string>();
sampleObject.Field = "Sample string";
Para obter mais informações, consulte:
Delegados
A delegar é 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 de 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 chamados por meio de representantes. Para obter mais informações sobre como usar delegados na manipulação de eventos, consulte Eventos e representantes. |
Para criar um delegado:
Delegate Sub SampleDelegate(ByVal str As String)
public delegate void SampleDelegate(string str);
Para criar uma referência a um método que corresponde à 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
class SampleClass
{
// Method that matches the SampleDelegate signature.
public static void sampleMethod(string message)
{
// Add code here.
}
// Method that instantiates the delegate.
void SampleDelegate()
{
SampleDelegate sd = sampleMethod;
sd("Sample string");
}
}
Para obter mais informações, consulte:
Visual Basic
C#