Személyes eszközök
Keresés

 

A InfoWiki wikiből



SEALED kulcsszó

A 'sealed' módosítót elsősorban osztályokra alkalmazhatjuk. Jelentése: 'lepecsételt'.

sealed class Console
{
  ...
}

Ezen módosító azt jelenti, hogy a megjelölt osztály később ősként nem választható más osztályok számára. Vagyis továbbfejlesztése nem lehetséges. Az osztály befejezett.

Egy 'sealed' class használata esetén a fordító bizonyos optimalizálásokat végezhet el, például bizonyos virtuális metódushívásokat feloldhat korai kötéssel, mivel ismert,hogy az osztálynak további leszármazottjai nem lesznek.

Mivel ez ellentmond az 'abstract' módosító használatának (annál a gyermekosztályok készítésegyakorlatilag kötelező), így az két módosító nem használható együtt.

A 'struct' kulcsszóval készített 'osztályok' (érték-típusú objektum-osztályok) eleve 'sealed' jelzéssel bírnak, így egyetlen ilyen osztályból sem készíthető gyermekosztály.

SEALED metódusok esetén

A 'sealed' jelzést metódusok bevezetésekor még nem, de felülírásakor már alkalmazhatjuk:


class Auto
{
  public virtual void Elindit() { ... }
}
// ---
class Kombajn
{
  public override sealed void Elindit() { ... }
}

A fenti eset azt jelenti, hogy a 'Kombajn' osztálynak elvileg lehetnek gyerekosztályai,de ezek egyike sem override-olhatja az 'Elindit()' metódust a továbbiakban.

Ilyetén használata ritkán, csak indokolt esetben fordul elő.

Ha egy metódusra a 'sealed' módosítót kívánunk helyezni, akkor annak kötelezően az 'override' módosítóval kell együtt szerepelnie (C# Language Specification 1.2, 10.5.5 fejezet). Ez azt jelenti, hogy csakis virtuális metódusokra alkalmazható a sealed, és bevezetéskor még nem (a virtual kulcsszó mellett még nem alkalmazható), hanem legkorábban az első gyermekosztályban az első override esetén vezethető be.

Ennek értelme az, hogy a 'virtual' és 'sealed' jelentéstartalma ellentmondana egymásnak. Hiszen a 'virtual'-al azt kívánjuk jelezni, hogy a gyermekosztályok ezen metódust (valószínűleg) felül fogják definiálni, és utasítjuk a fordítót, hogy e miatt alkalmazzon késői kötést, hogy a kellő rugalmasság meglegyen. A 'sealed' pontosan ezt a felüldefiniálhatóságot tiltja le, tehát értelmetlen lenne 'virtual sealed' metódust készíteni.

A nem 'virtual' metódusok esetén a 'sealed' használatának lenne értelme, de ezt a 'new'-al történő újbóli bevezetés egyébként megkerülné. Valamint a nem virtuális metódusok esetén mindenképpen a korai kötés van alkalmazva, ennek működése mellett nincs szükség a 'sealed' módosítóra, hiszen az újonnan bevezetett változatot visszamenőlegesen az ős osztályok amúgy sem használnák.

SEALED property esetén

A metódusok zárolásához hasonló működést eredményez, ha a 'sealed' kulcsszót property-kre alkalmazzuk (megj: a property is lehet virtual + override!).

Hernyák Zoltán
A lap eredeti címe: „http://wiki.ektf.hu/wiki/Mp3/ea13
Nézetek
nincs sb_18.220.154.41 cikk