Lição 8 - Classe Herança
Esta lição ensina sobre Herança C #. Os nossos objectivos são os seguintes:
Implementar base classes.
Aplicar derivadas classes.
Inicializar base classes derivadas de classes.
Aprenda a chamada classe base deputados.
Saiba como esconder a classe base deputados.
A herança é um dos principais conceitos de objeto-orientado
programação. Ele permite a você reutilizar código existente. Por meio eficaz
emprego de reutilização, você pode economizar tempo em sua programação.
Listing 8-1. Herança: BaseClass.cs
using System;
public class ParentClass
{
public ParentClass()
{
Console.WriteLine("Parent Constructor.");
}
public void print()
{
Console.WriteLine("I'm a Parent Class.");
}
}
public class ChildClass : ParentClass
{
public ChildClass()
{
Console.WriteLine("Child Constructor.");
}
public static void Main()
{
ChildClass child = new ChildClass();
child.print();
}
}
Output:
Parent Constructor.
Child Constructor.
I'm a Parent Class.
istagem 8-1 mostra duas classes. A primeira classe é chamado ParentClass e da classe principal é chamado ChildClass. O que nós queremos fazer é criar uma classe filha, usando ParentClass de código existente.
Em primeiro lugar, devemos declarar a nossa intenção de utilizar ParentClass como a classe base de ChildClass. Isso é realizado através da ChildClass declaração pública classe ChildClass: ParentClass. A classe base é especificado, adicionando um cólon, ":", após a classe derivada identificador e, em seguida, especificando o nome classe base.
Nota: C # suporta herança única classe única. Portanto, você pode especificar apenas uma classe base a partir de herdar. No entanto, ela permite múltiplas interfaces, herança, um sujeito com uma cobertura mais tarde lição.
ChildClass tem exactamente as mesmas capacidades como ParentClass. Devido a isto, pode-se dizer também ChildClass "é" uma ParentClass. Isso é mostrado na Main () ChildClass quando o método de impressão () é chamado método. ChildClass não tem a sua própria impressão () método, de forma que ele usa a ParentClass print () método. Você pode ver os resultados da 3 ª linha de produção.
Base classes são automaticamente instanciado antes derivados classes. Aviso a saída de Listagem 8-1. O construtor ParentClass executado antes da ChildClass construtor.
Listing 8-2. Classe derivada comunicar com classe base: BaseTalk.cs
using System;
public class Parent
{
string parentString;
public Parent()
{
Console.WriteLine("Parent Constructor.");
}
public Parent(string myString)
{
parentString = myString;
Console.WriteLine(parentString);
}
public void print()
{
Console.WriteLine("I'm a Parent Class.");
}
}
public class Child : Parent
{
public Child() : base("From Derived")
{
Console.WriteLine("Child Constructor.");
}
public new void print()
{
base.print();
Console.WriteLine("I'm a Child Class.");
}
public static void Main()
{
Child child = new Child();
child.print();
((Parent)child).print();
}
}
Output:
From Derived
Child Constructor.
I'm a Parent Class.
I'm a Child Class.
I'm a Parent Class.
Classes derivadas podem se comunicar com base aulas durante a instanciação. Listagem 8-2 mostra como isto é feito a declaração a criança construtor. O cólon, ":", ea palavra-chave base chamar a classe base construtor de correspondência com o parâmetro lista. Se o código não tinha anexado base ( "A partir de derivados") para os derivados construtor, o código teria automaticamente chamados Parent (). A primeira linha de produção mostra a classe base construtor seja chamado com a corda "A partir de derivados".
Às vezes você pode querer criar sua própria implementação de um método em que existe uma classe base. A classe Criança faz isso por declarar a sua própria impressão () método. A impressão Criança () método esconde a impressão Parent () método. O efeito é o Pai print () não irá ser chamado método, a menos que fazer alguma coisa de especial para ter certeza de que ele é chamado.
Dentro da Criança print () método, nós chamamos explicitamente a impressão Parent () método. Isto é feito através do método prefixing nome com "base.". Usando a base palavra-chave, você pode acessar qualquer um de uma classe base pública ou protegidos classe membros. A saída de impressão da Criança () método é a saída linhas 3 e 4.
Outra forma de acesso a classe base membros é expressa através de uma expressos. Isto é feito na última declaração da Criança classe principal () método. Lembre-se que uma classe derivada é uma especialização da sua classe base. Este facto permite-nos desempenhar um elenco sobre o derivado classe, tornando-se um exemplo da sua classe base. A última linha de produção de Listagem 8-2 mostra a impressão Parent () método foi efectivamente executado.
Aviso sobre o novo modificador da Criança classe print () método. Isso permite que este método para esconder a classe pai print () método estabelece expressamente a sua intenção e que você não quer que ocorra polimorfismo. Sem o novo modificador, o compilador irá produzir um aviso de chamar a atenção para este facto. Veja a próxima lição para uma discussão detalhada de polimorfismo.
Em resumo, você sabe como criar um derivado / classe base relacionamento. Você pode controlar instanciação de sua classe base chamada e seus métodos de forma implícita ou explícita. Você também compreender que uma classe derivada é uma especialização da sua classe base.
...(baseclass) Pode ser compilado, digitando a seguinte linha de comando:
CSC baseclass.cs
Pode executar o programa executável, digitando a seguinte linha de comando:
baseclass.exe
(basetalk) Pode ser compilado, digitando a seguinte linha de comando:
CSC basetalk.cs
Pode executar o programa executável, digitando a seguinte linha de comando:
basetalk.exe
CONTINUA....
FEAR
Boas Dark Fear,
É bom ver alguém a partilhar informação, só não entendi o que você chama de "class base deputados".
Seguindo o seu tópico senti-me um pouco confuso com o seu exemplo, embora a ideia base esteja lá, que é usarmos o constructor base num outro constructor que siga os mesmos atributos, mas para fins diferentes.
Eu programo em visual, pelo que alguma da minha confusão possa ser de você estar a dar exemplos em consola.
Sendo assim eu vou só deixar aqui um bocado do meu código, que é orientado a objectos:
namespace TESTE
{
class Pessoa
{
public string Id;
private string nome;
private string morada;
private string contacto;
public Pessoa() : this("","", "", "") { }
public Pessoa(string id,string nome, string morada, string contacto)
{
this.Id = id;
this.nome = nome;
this.morada = morada;
this.contacto = contacto;
}
public Pessoa(Pessoa outra) : this(outra.Id,outra.nome, outra.morada, outra.contacto) { }
public string Identificacao
{
get { return Id; }
set { Id = value; }
}
public string Nome
{
get { return nome; }
set { nome = value; }
}
public string Morada
{
get { return morada; }
set { morada = value; }
}
public string Contacto
{
get { return contacto; }
set { contacto = value; }
}
}
}
Como podem ver aqui é a classe base, visto que em "geral" uma pessoa tem ID, Nome, Morada e Contacto, esta classe vai servir de base para outra classe:
namespace TESTE
{
class Cliente:Pessoa
{
protected string Local_C;
protected string Orcamento;
public string Orcament
{
get { return this.Orcamento; }
set { this.Orcamento = value; }
}
public string LocalC
{
get { return this.Local_C; }
set { this.Local_C = value; }
}
public Cliente() : this("","", "", "", "","") { }
public Cliente(string id,string nome, string morada, string contacto, string localc, string orcamento)
:base(id,nome,morada,contacto){
this.Local_C = localc;
this.Orcament = orcamento;
}
public Cliente(object[] o)
:this(o[0].ToString(),o[1].ToString(),o[2].ToString(),o[3].ToString(),o[4].ToString(),o[5].ToString()){
}
}
}
Como podem ver o construtor Cliente da Classe Cliente, usa o constructor da Classe Pessoa, desta maneira não precisamos de estar sempre a repetirmo-nos que Constructor Y tem a,b,c atributos. Para isso cria-mos uma classe com um constructor que tenha os atributos comuns das outras classes.
Não sei se me fiz entender, pois as minhas explicações não são as melhores, e sem querer desvalorizar o seu trabalho Dark Fear.
Pois apesar de entender o objectivo eu não entendi muito bem o seu exemplo (talvez o meu também não seja o melhor)...
Cumprimentos
Dkid