Classes
Classe são tipos de dados compostos por propriedades e métodos. Em resumo classes são objetos compostos onde instanciámos.
Modelo de Classe:
Modificador de Classe class nome_Classe
{
Modificador de Classes
Codigo | Função |
---|---|
Public | Sem restrição de visualização. |
Abstract | Classe base, não pode ser instanciado objetos. |
Sealed | Classe não possui herdeiros. |
Static | Não permite que instanciem seus objetos ou membros. |
Especificador de Acesso
Codigo | Função |
---|---|
Public | Sem restrição de acesso. |
Private | Só podem ser acessados pela própria classe. |
Protected | Podem ser acessados pela própria classe e nas derivadas. |
Abstract | Os metodos não podem ser implementados, somente cabeçalhos. |
Sealed | Classe não pode ser herdado. |
Virtual | O método deve ser redefinido em uma classe derivada. |
Static | O metodos pode ser chamado mesmo sem a instanciação de um objeto |
Objetos
Objetos são os elementos criados a partir de uma classe.
Para isso utilizamos o operador new
responsável por alocar um espaço de memoria especifico para a ocupação do objeto.
Construtores e Destrutores
Construtor
É responsável por iniciar um objeto quando instanciado. No C# quando não declarado um construtor o mesmo gera um construtor default.
Para definir um construtor basta criar um método com o mesmo nome da classe. Estrutura basica:
namespace aguradorInstruções
{
class utilizando
{
static void Main()
{
Console.WriteLine("Qual sera o nome do objeto?");
string nomeou = Console.ReadLine();
Objetos o1 = new Objetos(nomeou);
Console.WriteLine("Qual sera a altura do objeto?");
...
}
}
Sobregarda de construtores se dá devido a uma serie de construtores com nomes iguais e funções semelhantes.
Destrutor
É responsável por eliminar uma objeto depois de realizado todas as atividades. Para informar um destrutor basta criar um método com o mesmo nome do construtor porem com um "~" na frente. Ainda é possivel passar um Console.WhiteLine();
para visualizar o objeto que esta sendo destruído.
Ordem de Execução dos construtores
A Ordem de execução se da sempre a partir das bases e hierarquicamente para as derivadas.
Exemplo
class Base
{
public Base()
{
Console.WriteLine("Construtor classe base");
}
}
class Deriva1:Base
{
public Deriva1()
{
Console.WriteLine("Construtor classe Deriva1");
}
}
class Deriva2:Deriva1
{
public Deriva2()
{
Console.WriteLine("Construtor classe Deriva2");
}
}
Resultado da execução >>
Construtor classe base
Construtor classe Deriva1
Construtor classe Deriva2
Classe Static
Quando utilizamos classes do tipo static não podemos definir construtor pois não pode se declarar objetos de classe static, então todos os membros da classe também devem ser static. Em suma pode ser entendido como um elemento comum a todo o program uma vez que usa uma posição estática de memoria.
Operador THIS
Faz referencia a um método pai, criando uma associação coerente.
ex;
Herança
Uma classe derivada, recebendo propriedades e métodos de uma classe base. Ainda sim uma classe mesmo sendo derivada possui seus membros próprios. Para referenciar uma classe pai basta usar um ":" seguido do nome da mesma.
class Primata
{
class Humano:Primata
{
Tem acesso a tudo exceto ao private
string etnia;
A Utilização na classe
Main();
class Principal
{
static void Main()
{
Humano pessoa = new Humano("Latino");
}
}
Já no caso da propriedade alimentacao
ela é uma propriedade a ser iniciada pela classe filha, então, utilizamos o operador :base()
para fazer a declaração de valor.
Heranças Encadeadas
Para encadear heranças basta fazer o mesmo processo de usar um ":" seguido do nome da base.
class Individuo:Humano
{
public string personalidade;
public Individuo():base("Latino")
{
personalidade = "neutra";
}
}
Acessors Get e Set
Apesar de parecer um método é uma propriedade especial, é utilizada para limitar a interação de um atributo private. Desta forma tera disponibilidade tanto de pegar um dado, quanto de setar um valor nele.
Definição:
class Primata
{
private int vidaEstimada;
Usando get
static void Main()
{
Humano pessoa = new Humano();
Console.WriteLine("A idade max de um humano é {0}", pessoa.idadeM)
}
Usando set
static void Main()
{
Humano pessoa = new Humano();
pessoa.idadeM = 200;
}
Indexadores de Classes
Permite que o objeto seja utilizado como um Array.
class Primata
{
private int[] vidaFases= new int[6]{0,9,18,27,36,45,54};
Usando
static void Main()
{
Humano pessoa = new Humano();
pessoa[2] = 300;
Console.WriteLine("Idade:{0}", pessoa[2]);
}
Interfaces
Interfaces só implementam só os protótipos dos métodos, uma classe pode implementar diversas interfaces.
Características das Interfaces:
- Não tem construtor ou destrutor
- Não tem método operator
- Não possui membros static
- Não possui propriedade
Implementando
public interface Primata
{
void nascer();
void morrer();
}
public interface Homosapiens
{
void evoluir();
}
Uma vez declarado metodos interface se faz necessário sua implementação na classe filha.
Usando
class Pessoa:Primata, ...
{
public bool nascer;
public Pessoa()
{
}
public void nascer()
{
this.nascer = true;
}
public void morrer()
{
this.nascer = false;
}
}
static void Main()
{
Pessoa Pessoa1 = new Pessoa();
}
Estrutura
Basicamente Struct é um tipo que vai armazenar diferentes tipos de dados. Metodos Struct são acessados diretamente dispensando o uso do ref
.
A estrutura deste tipo é muito semelhante a uma classe, mas, por não se tratar de uma classe ela não pode ser Herdada, ainda a mesma pode conter construtores.
Implementado
Usando
Array de estruturas
Usando o mesmo principio de declaração de arrays basta evidenciar o tipo da lista.
Implementando
Usando
Metodos retornando Objetos
Para um método retornar um objeto o construtor do objeto dever ser referenciado como retorno do metodo, por exemplo no lugar do void
que significa sem retorno.
Implementação
Usando
class Usando
{
static void Main()
{
Bananeira b1 = new Bananeira("First");
b1.botar();
}
}