Udostępnij za pośrednictwem


nowe modyfikator (C# odniesienia)

Kiedy jest używana jako modyfikator, new słowa kluczowego jawnie ukrywa członek odziedziczony po klasie podstawowej.Po ukryciu dziedziczonego członka, pochodna wersja elementu członkowskiego zastępuje wersję klasa bazowa.Chociaż można ukryć składniki bez użycia new modyfikator, wynik jest ostrzeżenie.Klienci korzystający z new Aby jawnie ukryć członka, znosi to ostrzeżenie i dokumentuje fakt, że pochodna wersja jest przeznaczona jako zamiennik.

Aby ukryć dziedziczonego członka, zadeklarowania go w klasie pochodnej przy użyciu tej samej nazwie i zmodyfikować go z new modyfikator.Na przykład:

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

W tym przykładzie BaseC.Invoke ukryte na skutek DerivedC.Invoke.Pole x nie występuje, ponieważ nie jest on ukryty przez o podobnej nazwie.

Nazwa ukrywanie poprzez dziedziczenie ma jedną z następujących form:

  • Stała, pola, właściwość lub typ wprowadzony w klasie lub strukturze powoduje ukrycie wszystkich członków klasy podstawowej o tej samej nazwie.

  • Metoda wprowadzona w klasie lub strukturze ukrywa właściwości, pola i typy o tej samej nazwie, w klasie podstawowej.Rozwiązanie to pozwala również na ukrycie wszystkich metod klasy podstawowej o tej samej sygnaturze.

  • Indeksowanie wprowadzone w klasie lub strukturze powoduje ukrycie wszystkich indeksatory klasy podstawowej o tej samej sygnaturze.

Jest to błąd, aby korzystać z obu new i zastąpić na tym samym użytkownikiem ponieważ dwa modyfikatorów mają znaczenie wzajemnie się wykluczają.new Modyfikator tworzy nowy element członkowski o takiej samej nazwie i powoduje, że oryginalnego elementu na końcowe będą ukryte.override Modyfikator rozszerza wykonania na dziedziczonego członka.

Za pomocą new modyfikator w deklaracji, że nie ukrywa dziedziczonego członka generuje ostrzeżenie.

Przykład

W tym przykładzie, klasa podstawowa, BaseCi w klasie pochodnej, DerivedC, użyj tej samej nazwy pola x, który ukrywa wartość pola dziedziczone.W przykładzie zademonstrowano użycie new modyfikator.Ilustruje też sposób uzyskać dostęp do ukrytych członków klasy bazowej przy użyciu ich w pełni kwalifikowane nazwy.

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
*/

W tym przykładzie klasą zagnieżdżoną ukrywa klasy, która ma taką samą nazwę w klasie podstawowej.W przykładzie pokazano, jak używać new modyfikator wyeliminować komunikat ostrzegawczy i sposobu dostępu do członków klasy ukryte przy użyciu ich w pełni kwalifikowane nazwy.

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
*/

Jeśli usuniesz new modyfikator, program nadal kompilować i uruchamiać, ale otrzymasz następujące ostrzeżenie:

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

Specyfikacja języka C#

Aby uzyskać więcej informacji, zobacz Specyfikacja języka C#. Specyfikacja języka to najlepsze źródło informacji dotyczących składni i zastosowania języka C#.

Zobacz też

Informacje

Słowa kluczowe języka C#

Operator słowa kluczowe (C# odniesienia)

Modyfikatory (C# odniesienia)

Przechowywanie wersji z Override i nowe słowa kluczowe (Podręcznik programowania C#)

Wiedząc, kiedy należy używać Override i nowe słowa kluczowe (C# Programming Guide)

Koncepcje

Podręcznik programowania C#

Inne zasoby

C# odniesienia