Curso de C#: Lição 9: Polimorfismo

Esta lição ensina sobre Polimorfismo em C#. Nossos objetivos são os seguintes: Saiba o que é polimorfismo. Aplicar um método Virtual. Substituir um Método Virtual. Use Polimorfismo em um Programa.

Por | @oficinadanet Programação
Esta lição ensina sobre Polimorfismo em C#. Nossos objetivos são os seguintes:

* Saiba o que é polimorfismo.
* Aplicar um método Virtual.
* Substituir um Método Virtual.
* Use Polimorfismo em um Programa.


Outro conceito primário de programação orientada a objeto é Polimorfismo.Ele permite invocar métodos derivados classe através de uma base class referência durante run-time. Isto é útil quando você precisa para atribuir um grupo de objetos de um array e, em seguida, invocar cada um dos seus métodos. Eles não têm necessariamente de ser o mesmo tipo de objeto. No entanto, se eles estiverem relacionados por herança, você pode adicioná-las ao array como o tipo herdado.Então, se todos eles compartilham o mesmo nome do método, que o método de cada objeto pode ser invocado. Esta lição irá mostrar como conseguir isso.

Listagem 9-1. Uma base classe com 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 o DrawingObject classe. Esta será a base para as outras classes de objetos de herdar. Ela tem um único método chamado Draw (). O método Draw () tem um modificador virtual. O modificador virtual indica a derivada classes que eles possam sobrepor este método. O Draw () método da classe DrawingObject realiza uma única acção de imprimir a declaração, "Eu sou apenas um desenho genérico objeto.", Para o console.

Listagem 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 método Draw () e cada Draw () método tem um modificador override. O método permite um modificador override para substituir o método virtual da sua classe base no run-time. O que acontecerá apenas se sobrepõem a classe é referenciado através de uma classe base referência. Sobrepondo métodos devem ter a mesma assinatura, nome e parâmetros, como o virtual base class método é imperativa.

Listagem 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 Lista Listing 9-1 e 9-2. Este programa implementa polimorfismo. No método Main () da classe DrawDemo, existe uma variedade que está sendo criado. O tipo de objeto nesta matriz é a DrawingObject classe. A matriz é chamado dObj e está sendo inicializado a deter quatro objectos do tipo DrawingObject.

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

Depois que a matriz é inicializado, existe um laço foreach que olha para cada elemento da matriz. Dentro do loop foreach o método Draw () é invocado em cada elemento do array dObj. Por causa de polimorfismo, o run-time de cada tipo de objeto é invocado. O tipo de referência do objeto do dObj array é um DrawingObject. No entanto, que não importa, porque o derivado classes substituirá o virtual Draw () DrawingObject método da classe. Isso faz com que os aumentada Draw () métodos das classes derivadas executado quando o método Draw () é chamado usando a classe base DrawingObject referência da dObj array. Veja o que a saída pode ser parecido com:

Saída:
I'm a Line.
I'm a Circle.
I'm a Square.
I'm just a generic drawing object.


O override Draw () método de cada classe derivada executa como mostrado no programa DrawDemo.A última linha é a partir do virtual Draw () DrawingObject método da classe. Isso porque o real run-time tipo do quarto elemento foi um array DrawingObject objeto.

O código nesta lição 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 arquivo na linha de comando.

Resumo


Agora você deve ter uma compreensão básica do 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 lhes permite sobrepor polimorfismo. Esta lição mostraram como usar esta relação entre as classes para implementar polimorfismo em um programa.

Tradução automática de: http://www.csharp-station.com/Tutorials/Lesson09.aspx

Mais sobre: curso c sharp, c#
Share Tweet
DESTAQUESRecomendado
Mais compartilhados
Comentários
Continue lendo