Share via


Sabendo quando usar substituir e palavras-chave New (guia de programação translation from VPE for Csharp)

Translation from VPE for Csharp permite que sistema autônomo métodos em classes derivadas para que o mesmo nome sistema autônomo métodos em classes base — desde que sejam muito específico sobre sistema autônomo o novo método deve ser tratado.O exemplo a seguir demonstra o uso do novo and Substituir palavras-chave.

Primeiro, declare três classes: a base classe de de chamadaCare duas classes que derivam, ConvertibleCar e Minivan. A classe base contém um único método, DescribeCar, que envia uma descrição do carro ao console. Os métodos de classe derivada também incluem um método chamado DescribeCar, que exibe as propriedades exclusivas. Esses métodos também chamam a classe base DescribeCar método para demonstrar como eles têm herdadas as propriedades das Car classe.

Para destacar a diferença, a ConvertibleCar classe é definida com o new palavra-chave, enquanto o Minivan classe é definida com override.

// Define the base class
class Car
{
    public virtual void DescribeCar()
    {
        System.Console.WriteLine("Four wheels and an engine.");
    }
}

// Define the derived classes
class ConvertibleCar : Car
{
    public new virtual void DescribeCar()
    {
        base.DescribeCar();
        System.Console.WriteLine("A roof that opens up.");
    }
}

class Minivan : Car
{
    public override void DescribeCar()
    {
        base.DescribeCar();
        System.Console.WriteLine("Carries seven people.");
    }
}

Agora podemos escrever alguns códigos que declara instâncias dessas classes e chama seus métodos para que os objetos podem se descrevem:

public static void TestCars1()
{
    Car car1 = new Car();
    car1.DescribeCar();
    System.Console.WriteLine("----------");

    ConvertibleCar car2 = new ConvertibleCar();
    car2.DescribeCar();
    System.Console.WriteLine("----------");

    Minivan car3 = new Minivan();
    car3.DescribeCar();
    System.Console.WriteLine("----------");
}

sistema autônomo você pode esperar, a saída terá esta aparência:

Four wheels and an engine.

----------

Four wheels and an engine.

A roof that opens up.

----------

Four wheels and an engine.

Carries seven people.

----------

No entanto, esta próxima seção do código, podemos declarar uma matriz de objetos derivados do Car classe base. Esse array pode armazenar Car, ConvertibleCar, e Minivan objetos. A matriz é declarada como este:

public static void TestCars2()
{
    Car[] cars = new Car[3];
    cars[0] = new Car();
    cars[1] = new ConvertibleCar();
    cars[2] = new Minivan();
}

Em seguida, usamos um foreach loop para visitar cada Car objeto contido na matriz e telefonar a DescribeCar método, como este:

foreach (Car vehicle in cars)
{
    System.Console.WriteLine("Car object: " + vehicle.GetType());
    vehicle.DescribeCar();
    System.Console.WriteLine("----------");
}

A saída esse loop é da seguinte maneira:

Car object: YourApplication.Car

Four wheels and an engine.

----------

Car object: YourApplication.ConvertibleCar

Four wheels and an engine.

----------

Car object: YourApplication.Minivan

Four wheels and an engine.

Carries seven people.

----------

Observe como a ConvertibleCar a descrição é não o que você poderia esperar. sistema autônomo a new palavra-chave foi usado para definir esse método, o método de classe derivada não é chamado — o método de classe base é chamado em vez disso. The Minivan objeto corretamente chama o método substituído, produzindo resultados esperado.

Se você desejar aplicar uma regra que todas sistema autônomo classes derivadas de Car deve implementar o DescribeCar método, você deve criar uma nova classe base que define o método DescribeCar sistema autônomo abstract. Um método abstrato não contém qualquer código, a assinatura de método.As classes derivadas dessa classe base devem fornecer uma implementação de DescribeCar. Para obter mais informações, consulte Resumo.

Consulte também

Conceitos

Guia de Programação C#

Referência

Classes e estruturas (guia de programação translation from VPE for Csharp)

Versão com o substituição e palavras-chave new (guia de programação C#)