lezárt (C# referencia)
Egy osztályra alkalmazva a sealed
módosító megakadályozza, hogy más osztályok örököljenek belőle. Az alábbi példában az osztály B
az osztálytól A
örököl, de egyetlen osztály sem örökölhet az osztálytól B
.
class A {}
sealed class B : A {}
A módosító olyan metóduson vagy tulajdonságon is használható sealed
, amely felülbírál egy virtuális metódust vagy tulajdonságot egy alaposztályban. Ez lehetővé teszi, hogy az osztályok az osztályból származhassanak, és megakadályozzák, hogy felülírjanak bizonyos virtuális metódusokat vagy tulajdonságokat.
Példa
Az alábbi példában a rendszer örökli Y
a deklarált X
és lezárt Y
virtuális függvénytF
, Z
de Z
nem tudja felülbírálni.
class X
{
protected virtual void F() { Console.WriteLine("X.F"); }
protected virtual void F2() { Console.WriteLine("X.F2"); }
}
class Y : X
{
sealed protected override void F() { Console.WriteLine("Y.F"); }
protected override void F2() { Console.WriteLine("Y.F2"); }
}
class Z : Y
{
// Attempting to override F causes compiler error CS0239.
// protected override void F() { Console.WriteLine("Z.F"); }
// Overriding F2 is allowed.
protected override void F2() { Console.WriteLine("Z.F2"); }
}
Amikor új metódusokat vagy tulajdonságokat határoz meg egy osztályban, megakadályozhatja, hogy az osztályok felülírják őket, ha nem deklarálják őket virtuálisként.
Hiba az absztrakt módosító zárt osztálysal való használata, mert az absztrakt osztályt egy olyan osztálynak kell örökölnie, amely az absztrakt metódusok vagy tulajdonságok implementálását biztosítja.
Metódusra vagy tulajdonságra alkalmazva a sealed
módosító mindig felülbírálással használható.
Mivel a szerkezetek implicit módon vannak lezárva, nem örökölhetők.
További információ: Öröklés.
További példákért lásd : Absztrakt és lezárt osztályok és osztálytagok.
sealed class SealedClass
{
public int x;
public int y;
}
class SealedTest2
{
static void Main()
{
var sc = new SealedClass();
sc.x = 110;
sc.y = 150;
Console.WriteLine($"x = {sc.x}, y = {sc.y}");
}
}
// Output: x = 110, y = 150
Az előző példában az alábbi utasítással megpróbálhatja örökölni a lezárt osztályt:
class MyDerivedC: SealedClass {} // Error
Az eredmény egy hibaüzenet:
'MyDerivedC': cannot derive from sealed type 'SealedClass'
Megjegyzések
Annak megállapításához, hogy osztályt, metódust vagy tulajdonságot szeretne-e lezárni, általában a következő két pontot kell figyelembe vennie:
Az osztályokból származó lehetséges előnyök az osztály testreszabásának képességén keresztül nyerhetnek.
Az osztályok származtatásának lehetősége úgy módosíthatja az osztályokat, hogy azok már nem működnek megfelelően vagy a várt módon.
C# nyelvspecifikáció
További információkért lásd a C# nyelvi specifikációját. A nyelvi specifikáció a C#-szintaxis és -használat végleges forrása.
Lásd még
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: