اصلاحگر sealed وقتی به یک کلاس اعمال می شود، از ارث بری کلاس های دیگر از این کلاس جلوگیری می کند. در مثال زیر کلاس B از کلاس A ارث بری می کند، اما هیچ کلاسی نمی تواند از کلاس B ارث بری کند.
class A {} sealed class B : A {}
شما همچنین می توانید از اصلاحگر sealed روی پراپرتی یا متدی که یک پراپرتی یا متد مجازی (virtual) را در کلاس پایه رونویسی (override) می کند، استفاده کنید. این کار به شما این امکان را می دهد که به کلاس ها اجازه دهید که از کلاس شما ارث بری کنند و از override کردن برخی متدها یا پراپرتی ها جلوگیری به عمل آورید.
مثال
در مثال زیر ، Z از Y ارث می برد اما Z نمی تواند تابع مجازی F را که در X اعلان شده و در Y مهروموم (sealed) شده را رونویسی (override) کند.
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("X.F3");} } class Z : Y { // Attempting to override F causes compiler error CS0239. // protected override void F() { Console.WriteLine("C.F"); } // Overriding F2 is allowed. protected override void F2() { Console.WriteLine("Z.F2"); } }
وقتی متدها و پراپرتی های جدیدی را در یک کلاس اعلان می کنید، با اعلان نکردن آنها بصورت مجازی (virtual)، می توانید از رونویسی کردن آنها توسط کلاس های مشتق شده جلوگیری کنید.
استفاده از اصلاحگر abstract با یک کلاس مهر و موم شده (sealed) خطا است، زیرا یک کلاس abstract باید توسط کلاسی دیگر که یک پیاده سازی از متدها و پراپرتی هایش ارائه می دهند، ارث بری شود.
اصلاحگر sealed هنگامی که بر روی متدها و پراپرتی ها اعمال می شود، حتما" باید با اصلاحگر override همراه باشد.
به این علت که struct ها (ساختارها) بصورت ضمنی sealed هستند، نمی توانند ارث بری شوند.
sealed class SealedClass { public int x; public int y; } class SealedTest2 { static void Main() { SealedClass sc = new SealedClass(); sc.x = 110; sc.y = 150; Console.WriteLine("x = {0}, y = {1}", sc.x, sc.y); } } // Output: x = 110, y = 150
در مثال قبل، شما ممکن است سعی کنید با استفاده از بیان زیر، از کلاس مهر و موم شده (sealed) ارث بری کنید:
class MyDerivedC: SealedClass {} // Error
که نتیجه آن پیغام خطای زیر است:
'MyDerivedC' cannot inherit from sealed class 'SealedClass'.