Modifikátor nové (C#-Reference)
Při použití jako modifikátor, new klíčové slovo explicitně skryje člen zděděna ze základní třídy.Při skrytí zděděný člen odvozené verze člena, nahradí verze základní třída.Přestože lze skrýt členy bez použití new , modifikátor, výsledek je upozornění.Používáte-li new členem výslovně skrýt, potlačí upozornění a dokumenty na skutečnost, že odvozené verze je určena jako náhrada.
Chcete-li skrýt zděděný člen deklarovat v odvozené třídě pomocí stejný název a změnit new modifikátor.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 skrytá pomocí DerivedC.Invoke.Pole x není ovlivněno, protože není skrytý podobným názvem.
Název skrytí prostřednictvím dědičnosti má jednu z těchto forem:
Konstanta, pole, vlastnost nebo typu zavedené v třídě nebo struktuře skryje všechny členy základní třídy se stejným názvem.
Metoda zavedena ve třídě nebo struktuře skryje vlastnosti polí a typy se stejným názvem v základní třídě.Skryje také všechny metody základní třídy se stejným podpisem.
Indexovací člen zavedené v třídě nebo struktuře skryje všechny základní třídy indexování se stejným podpisem.
Jedná se o chybu použít obě new a Přepsat na stejný člen protože dvě Modifikátory mají význam vzájemně vylučují.new Modifikátor vytvoří nový člen se stejným názvem a způsobí, že původní člen skryté.override Modifikátor rozšiřuje provádění zděděný člen.
Použití new modifikátor v prohlášení, že neskryje zděděný člen generuje varování.
Příklad
V tomto příkladu je základní třída BaseCa odvozené třídy DerivedC, použijte stejný název pole x, která skryje hodnoty zděděných pole.Příklad ukazuje použití new modifikátor.Také ukazuje, jak přístup pomocí jejich úplných názvů skryté členy základní třídy.
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 skryje vnořené třídy třída, která má stejný název základní třídy.Příklad demonstruje použití new modifikátor vyloučit upozornění a přístupu pomocí plně kvalifikovaných názvů třídy skryté členy.
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 new , modifikátor, program stále sestavit a spustit, ale zobrazí 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 naleznete 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
Operátor klíčová slova (C#-Reference)