Sdílet prostřednictvím


new – modifikátor (Referenční dokumentace jazyka C#)

Při použití jako modifikátoru deklarace klíčové slovo new explicitně skryje člena, který je zděděn ze základní třídy.Při skrytí zděděného člena, odvozená verze člena nahradí verzi základní třídy.Ačkoli můžete skrýt členy, bez použití modifikátoru new, obdržíte upozornění kompilátoru.Použijete-li new pro explicitní skrytí člena, potlačí toto upozornění.

Chcete-li skrýt zděděného člena, deklarujte jej v odvozené třídě pomocí stejného názvu členu a upravte jej pomocí klíčového slova new.Příklad:

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

V tomto příkladu BaseC.Invoke je skryto pomocí DerivedC.Invoke.Pole x není ovlivněno, protože není skryté podobným názvem.

Skrytí názvu prostřednictvím dědičnosti má jednu z těchto forem:

  • Obecně konstanta, pole, vlastnost nebo typ, které jsou zavedeny ve třídě nebo struktuře, skryjí všechny členy základní třídy, které sdílejí její název. Existují zvláštní případy. Například, pokud deklarujete, aby nové pole s názvem N mělo typ, který není nevyvolatelný a základní typ deklaruje N jako metodu, nové pole neskryje základní deklaraci v syntaxi vyvolání. Viz Specifikace jazyka C#, kde naleznete podrobné informace (viz část Vyhledávání členů v části Výrazy).

  • Metody zavedené ve třídě nebo struktuře skryjí vlastnosti polí a typů, které sdílejí tento název v základní třídě.Skryje také všechny metody základní třídy, které mají stejný podpis.

  • Indexer zavedený ve třídě nebo struktuře skryje všechny základní třídy indexerů, které mají stejný podpis.

Jedná se o chybu, chcete-li použít new i override na stejný člen, protože dva modifikátory mají vzájemně vylučují význam.Modifikátor new vytvoří nový člen se stejným názvem a způsobí, že původní člen bude skrytý.Modifikátor override rozšiřuje implementaci pro zděděného člena.

Použití modifikátoru new v deklaraci, která neskryje zděděného člena, vygeneruje upozornění.

Příklad

V tomto příkladu základní třída BaseC a odvozená třídy DerivedC použije stejný název pole x, který skryje hodnotu zděděného pole.Příklad demonstruje použití modifikátoru new.Také ukazuje, jak přistupovat ke skrytým členům základní třídy pomocí jejich plně kvalifikovaných názvů.

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

V tomto příkladu vnořené třídy skryjí třídu, která má stejný název v základní třídě.Příklad ukazuje, jak použít modifikátor new k vyloučení upozornění a jak přistupovat ke skrytým členům třídy pomocí jejich plně kvalifikovaných názvů.

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

Pokud odeberete modifikátor new, program bude stále kompilován a spuštěn, ale zobrazí se následující upozornění:

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

Specifikace jazyka C#

Další informace najdete v tématu Specifikace jazyka C#. Specifikace jazyka je úplným a rozhodujícím zdrojem pro syntaxi a použití jazyka C#.

Viz také

Referenční dokumentace

Klíčová slova jazyka C#

Klíčová slova operátorů (Referenční dokumentace jazyka C#)

Modifikátory (Referenční dokumentace jazyka C#)

Správa verzí pomocí klíčových slov override a new (Průvodce programováním v C#)

Znalost, kdy použít klíčová slova override a new (Průvodce programováním v C#)

Koncepty

Průvodce programováním v C#

Další zdroje

Referenční dokumentace jazyka C#