Partilhar via


novo modificador (referência de C#)

Quando usado como um modificador, a palavra-chave de new oculta explicitamente um membro herdado de uma classe base.Quando você oculta um membro herdado, a versão derivado de membro substitui a versão da classe base.Embora você possa ocultar membros sem o uso do modificador de new , o resultado é um aviso.Se você usar new explicitamente para ocultar um membro, suprime este aviso e documenta o fato de que a versão derivado é destinada como uma substituição.

Para ocultar um membro herdado, declare-a na classe derivada usando o mesmo nome, e altere-o com o modificador de new .Por exemplo:

public class BaseC
{
    public int x;
    public void Invoke() { }
}
public class DerivedC : BaseC
{
    new public void Invoke() { }
}

Nesse exemplo, BaseC.Invoke está oculto por DerivedC.Invoke.O campo x não é afetado porque não está oculto por um nome semelhante.

O nome que oculta com herança usa um dos seguintes formas:

  • Uma constante, um campo, propriedade, ou um tipo introduzido em uma classe ou estrutura em um ocultam os membros da classe base com o mesmo nome.

  • Um método introduzido em uma classe ou em propriedades de oculta de estrutura, campos, e tipos, com o mesmo nome, na classe base.Também oculta todos os métodos da classe base com a mesma assinatura.

  • Um indexador introduzido em uma classe ou estrutura em um oculta todos os indicadores da classe base com a mesma assinatura.

É um erro para usar new e substituição no mesmo membro porque os dois modificadores têm significados mutuamente exclusivos.O modificador de new cria um novo membro com o mesmo nome e faz com que o membro original torne-se oculto.O modificador de override estende a implementação de um membro herdado.

Usar o modificador de new em uma declaração que não oculte um membro herdado gera um aviso.

Exemplo

Nesse exemplo, uma classe base, BaseC, e uma classe derivada, DerivedC, usam o mesmo nome de campo x, que oculta o valor do campo herdado.O exemplo demonstra o uso do modificador de new .Também demonstra como acessar os membros ocultos da classe base usando seus nomes totalmente qualificados.

public class BaseC
{
    public static int x = 55;
    public static int y = 22;
}

public class DerivedC : BaseC
{
    // Hide field 'x'.
    new public static int x = 100;

    static void Main()
    {
        // Display the new value of x:
        Console.WriteLine(x);

        // Display the hidden value of x:
        Console.WriteLine(BaseC.x);

        // Display the unhidden member y:
        Console.WriteLine(y);
    }
}
/*
Output:
100
55
22
*/

Nesse exemplo, uma classe aninhada oculta uma classe que tem o mesmo nome na classe base.O exemplo demonstra como usar o modificador de new para eliminar a mensagem de aviso e como acessar os membros ocultos da classe usando seus nomes totalmente qualificados.

public class BaseC 
{
    public class NestedC 
    {
        public int x = 200;
        public int y;
    }
}

public class DerivedC : BaseC 
{
    // Nested type hiding the base type members.
    new public class NestedC   
    {
        public int x = 100;
        public int y; 
        public int z;
    }

    static void Main() 
    {
        // Creating an object from the overlapping class:
        NestedC c1  = new NestedC();

        // Creating an object from the hidden class:
        BaseC.NestedC c2 = new BaseC.NestedC();

        Console.WriteLine(c1.x);
        Console.WriteLine(c2.x);   
    }
}
/*
Output:
100
200
*/

Se você remover o modificador de new , o programa ainda irá criar e executar, mas você terá o seguinte aviso:

The keyword new is required on 'MyDerivedC.x' because it hides inherited member 'MyBaseC.x'.

Especificação da linguagem C#

Para obter mais informações, consulte Especificação de linguagem do C# A especificação da linguagem é a fonte definitiva para a sintaxe e o uso da linguagem C#.

Consulte também

Referência

Palavras-chave C#

Palavras-chave de operador (referência de C#)

Modificadores (referência de C#)

Controle de versão com a substituição e novas palavras-chave (guia de programação do C#)

Saber quando usar substituição e novas palavras-chave (guia de programação C#)

Conceitos

Guia de programação do C#

Outros recursos

Referência de C#