Megosztás a következőn keresztül:


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 Yvirtuá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