Ultimate C# tuto/Lição 9 - Polimorfismo

Started by ÐλяkFeλя, 10 de September , 2008, 11:04:02 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

ÐλяkFeλя

Lição 9 - Polimorfismo

Esta lição ensina sobre Polimorfismo em C #. Os nossos objectivos são os seguintes:

     * Saiba o que é Polimorfismo.
     * Aplicar um método virtual.
     * Substituir um método virtual.
     * Use uma Polimorfismo no Programa.

Outro conceito primário de programação orientada a objeto é Polimorfismo. Ela permite que você invocar métodos derivados classe através de uma classe base referência em tempo de execução. Isto é muito útil quando você precisa de atribuir a um grupo de objectos para um array e, depois, cada um de invocar os seus métodos. Eles não têm necessariamente de ser o mesmo tipo de objeto. No entanto, se eles estão relacionados por herança, você pode adicioná-las ao array como herdou o tipo. Então, se todos eles partilham o mesmo método nome, de modo que cada objeto pode ser invocada. Esta lição irá mostrar-lhe como fazer isso.

Listing 9-1. A classe base em um método virtual: DrawingObject.cs

using System;

public class DrawingObject
{
    public virtual void Draw()
    {
        Console.WriteLine("I'm just a generic drawing object.");
    }
}

Listagem 9-1 mostra a DrawingObject classe. Esta será a classe base para outros objectos a partir de herdar. Ele tem um único método chamado Draw (). O sorteio () método tem um modificador virtual. O virtual modificador indica a derivada classes que eles possam sobrepor este método. O sorteio () DrawingObject o método da classe realiza uma única acção de imprimir a declaração, "I'm just a generic drawing object."(Eu sou apenas um desenho genérico objeto.), Para o console.

Listing 9-2. Classes derivadas Com Override Métodos: Line.cs, Circle.cs, e Square.cs

using System;

public class Line : DrawingObject
{
    public override void Draw()
    {
        Console.WriteLine("I'm a Line.");
    }
}

public class Circle : DrawingObject
{
    public override void Draw()
    {
        Console.WriteLine("I'm a Circle.");
    }
}

public class Square : DrawingObject
{
    public override void Draw()
    {
        Console.WriteLine("I'm a Square.");
    }
}

Listagem 9-2 mostra três classes. Estas classes herdam o DrawingObject classe. Cada classe tem um Draw () e cada método Draw () método tem um modificador override. O método permite um modificador sobrepor a sobrepor-se ao método virtual da sua classe base em tempo de execução. O que acontecerá apenas se sobrepõem a classe é referenciado através de uma classe base referência. Imperiosas métodos devem ter a mesma assinatura, nome e parâmetros, como a classe base virtual método é imperativa.

Listing 9-3. Programa execução polimorfismo: DrawDemo.cs

using System;

public class DrawDemo
{
    public static int Main( )
    {
        DrawingObject[] dObj = new DrawingObject[4];

        dObj[0] = new Line();
        dObj[1] = new Circle();
        dObj[2] = new Square();
        dObj[3] = new DrawingObject();

        foreach (DrawingObject drawObj in dObj)
        {
            drawObj.Draw();
        }

        return 0;
    }
}

Listagem 9-3 mostra um programa que utiliza as classes definidas na listagem Listing 9-2 e 9-1. Este programa implementa polimorfismo. No Main () DrawDemo o método de classe, há uma série a ser criado. O tipo de objeto nesta matriz é a DrawingObject classe. A matriz é chamado dObj e está a ser inicializado a deter quatro objetos do tipo DrawingObject.

Próximo a dObj array é inicializado. Devido ao seu relacionamento com a herança DrawingObject classe, a Line, Circle, Square e de classes pode ser atribuído ao dObj array. Sem esse recurso, você teria que criar uma matriz para cada tipo. Herança permite que objetos derivados de agir como sua classe base, o que poupa trabalho.

Após a matriz é inicializado, existe um laço foreach que olha para cada elemento da matriz. Dentro do loop foreach o Draw () método é invocado por cada elemento do array dObj. Por causa do polimorfismo, o tempo de execução de cada tipo de objeto é invocado. O tipo de objeto de referência a partir da dObj array é um DrawingObject. No entanto, isso não importa porque os derivados aulas virtuais sobrepor-se ao sorteio () DrawingObject o método da classe. Isso faz com que o aumentada Draw () os métodos de classes derivadas executado quando o Draw () é chamada utilizando o método DrawingObject classe base de referência a dObj array. Veja o que a saída é algo parecido com:

QuoteOutput:

     I'm a Line.
    I'm a Circle.
    I'm a Square.
    I'm just a generic drawing object.

Quote from: "Traduzido"Saída:

      Eu sou um Line.
     Eu sou um círculo.
     Eu sou uma praça.
     Eu sou apenas um desenho genérico objeto.

O sobrepor Draw () método de cada classe derivada executa DrawDemo como mostrado no programa. A última linha é virtual a partir do sorteio () DrawingObject o método da classe. Isso porque o real em tempo de execução tipo de arranjo o quarto elemento foi DrawingObject um objeto.

A lição a este código pode ser compilado com a seguinte linha de comando:

     csc DrawDemo.cs DrawingObject.cs Circle.cs Line.cs Square.cs

Irá criar o arquivo DrawDemo.exe, que a omissão do nome do primeiro ficheiro na linha de comando.

Em resumo,agora, você deve ter uma compreensão básica de polimorfismo. Você sabe como definir um método virtual. Você pode implementar uma classe derivada método que se sobreponha um método virtual. Esta relação entre virtual e os métodos derivados classe métodos que se sobrepõem a lhes permite polimorfismo. Esta lição mostraram como usar esta relação entre as classes de implementar polimorfismo em um programa.


DrawDemo.cs


using System;

public class DrawDemo
{
    public static int Main( )
    {
        DrawingObject[] dObj = new DrawingObject[4];

        dObj[0] = new Line();
        dObj[1] = new Circle();
        dObj[2] = new Square();
        dObj[3] = new DrawingObject();

        foreach (DrawingObject drawObj in dObj)
        {
            drawObj.Draw();
        }

        return 0;
    }
}


DrawingObject


using System;

public class DrawingObject
{
    public virtual void Draw()
    {
        Console.WriteLine("I'm just a generic drawing object.");
    }
}


Lcs.cs

using System;

public class Line : DrawingObject
{
    public override void Draw()
    {
        Console.WriteLine("I'm a Line.");
    }
}

public class Circle : DrawingObject
{
    public override void Draw()
    {
        Console.WriteLine("I'm a Circle.");
    }
}

public class Square : DrawingObject
{
    public override void Draw()
    {
        Console.WriteLine("I'm a Square.");
    }
}

... (Polimorfismo) Podem ser compilados usando a follwong de linha de comando:

CSC drawingobject.cs lcs.cs drawdemo.cs

Pode executar o programa executável, digitando a seguinte linha de comando

drawingobject LCS drawdemo

CoNTINUA....




FEAR...

#phobia

Ae Fear, vou te dar seu primeiro ponto positivo ae cara, já tem um tempo que queria fazer isso, mas não tive tempo e como ninguém deu está ai!

Parabéns pelo tuto que tu ta montando ae e vamos aguardando até o fim neh! =p


vlw!
abs.  ;)