Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ha a new kulcsszót deklarációs módosítóként használja, explicit módon elrejti az alaposztály által biztosított tagot. Ha elrejt egy öröklött tagot, a tag származtatott verziója lecseréli az alaposztály verzióját. Elrejthet egy tagot, ha az alaposztály verziója látható a származtatott osztályban. Az alaposztály verziója nem látható, ha azt jelöli private , vagy bizonyos esetekben internal. Bár a módosító használata nélkül elrejtheti vagy public elrejtheti protected a new tagokat, a fordító figyelmeztetést kap. Ha new kifejezetten el szeretne rejteni egy tagot, az letiltja ezt a figyelmeztetést.
A C# nyelv referenciadokumentuma a C# nyelv legújabb kiadású verzióját ismerteti. Emellett a közelgő nyelvi kiadás nyilvános előzetes verziójú funkcióinak kezdeti dokumentációját is tartalmazza.
A dokumentáció azonosítja azokat a funkciókat, amelyeket először a nyelv utolsó három verziójában vagy az aktuális nyilvános előzetes verziókban vezetnek be.
Jótanács
Ha meg szeretné tudni, hogy mikor jelent meg először egy funkció a C#-ban, tekintse meg a C# nyelvi verzióelőzményeiről szóló cikket.
A kulcsszóval new létrehozhat egy típuspéldányt , vagy általános típuskényszerként is.
Az örökölt tag elrejtéséhez deklarálja a származtatott osztályban ugyanazzal a tagnévvel, és módosítsa a new kulcsszóval. Például:
public class BaseC
{
public int x;
public void Invoke() { }
}
public class DerivedC : BaseC
{
new public void Invoke() { }
}
Ebben a példában BaseC.Invoke a rejtett DerivedC.Invoke. A mezőre x nincs hatással, mert nem rejti el egy hasonló név.
Az öröklés során elrejtett név az alábbi űrlapok egyikét használja:
Az osztályban vagy szerkezetben bevezetett állandó, mező, tulajdonság vagy típus általában elrejti az összes olyan alaposztálytagot, amely megosztja a nevét. Vannak azonban különleges esetek. Ha például egy új, névvel
Nrendelkező mezőt nem visszavonhatatlan típusnak deklarál, és egy alaptípus metódusnak deklarálhatóN, az új mező nem rejti el az alapdeklarációt a meghívás szintaxisában. További információ: A C# nyelv specifikációjánakTagkeresés szakasza.Egy osztályban vagy szerkezetben bevezetett metódus elrejti azokat a tulajdonságokat, mezőket és típusokat, amelyek megosztják ezt a nevet az alaposztályban. Emellett elrejti az azonos aláírású alaposztály-metódusokat is.
Az osztályban vagy szerkezetben bevezetett indexelő elrejti az összes olyan alaposztály-indexelőt, amely ugyanazzal az aláírással rendelkezik.
Hiba mindkettőt és felülbírálást használni new ugyanazon a tagon, mert a két módosítónak kölcsönösen kizáró jelentése van. A new módosító létrehoz egy új tagot ugyanazzal a névvel, és az eredeti tag el van rejtve. A override módosító kibővíti az örökölt tag implementációját.
new A módosító olyan deklarációban való használata, amely nem rejt el öröklött tagokat, figyelmeztetést hoz létre.
Példák
Ebben a példában egy alaposztály BaseCés egy származtatott osztály ugyanazt a mezőnevet DerivedChasználja, xamely elrejti az örökölt mező értékét. A példa a módosító new használatát mutatja be. Azt is bemutatja, hogyan érheti el az alaposztály rejtett tagjait teljes névvel.
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
*/
Ebben a példában egy beágyazott osztály elrejt egy olyan osztályt, amelynek ugyanaz a neve az alaposztályban. A példa bemutatja, hogyan használható a módosító a new figyelmeztető üzenet eltávolítására, és hogyan érheti el a rejtett osztálytagokat a teljes névvel.
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
*/
Ha eltávolítja a new módosítót, a program továbbra is fordít és fut, de a következő figyelmeztetést kapja:
The keyword new is required on 'MyDerivedC.x' because it hides inherited member 'MyBaseC.x'.
C# nyelvspecifikáció
További információ: A C# nyelv specifikációjánakúj módosító szakasza.