Ultimate C# tuto/Lição 8 - Classe Herança

Started by ÐλяkFeλя, 09 de September , 2008, 09:46:12 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

ÐλяkFeλя

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

Dkid

#1
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