کلمه کلیدی sealed در کلاس ها و متد ها

پنجشنبه 2 مهر 1394

واژه‌ی sealed به معنای مهر و موم شده است و با استفاده از آن اطمینان می‌یابید که از یک کلاس مهر و موم شده نمی‌توان ارث‌بری کرد. به‌ منظور sealed کردن یک کلاس، کافی است که در ابتدای تعریف کلاس از کلمه‌ی کلیدی sealed استفاده کنید.

کلمه کلیدی sealed در کلاس ها و  متد ها

واژه‌ی sealed به معنای مهر و موم شده است و با استفاده از آن اطمینان می‌یابید که از یک کلاس مهر و موم شده نمی‌توان ارث‌بری کرد.  به‌ منظور sealed کردن یک کلاس، کافی است که در ابتدای تعریف کلاس از کلمه‌ی کلیدی sealed استفاده کنید. با استفاده از کلمه‌ی کلیدی sealed به راحتی می‌توانید مانع انجام شدن inheritance (ارث بری)شوید . برای مثال به کد زیر توجه کنید .

دو کلاس ClassA و ClassB ایجاد میکنیم که  ClassB از ClassA ارث بری میکند .

public class ClassA  
{  
    public void MethodA()  
    {  
    }  
}  
  
public class ClassB : ClassA  
{  
    public virtual void Method1()  
    {  
    }  
} 

کد بالا به درستی کار میکند و هنگام کامپایل خطا نمی دهد .

اکنون کلمه Sealed  را قبل از ClassA قرار می دهیم و تغییرات را مشاهده میکنیم .

    sealed public class ClassA  
    {  
        public void MethodA()  
        {  
        }  
    }  
      
    public class ClassB : ClassA  
    {  
        public virtual void Method1()  
        {  
        }  
    }  

هنگام اجرا کردن خطا زیر را مشاهده میکنید .

'ClassB': cannot derive from sealed type ‘ClassA'

استفاده از Sealed در متد ها

مانند کلاسها نمی توان در متدها از Sealed به طور مستقیم استفاده کرد . کلمه کلیدی Sealed در متد ها برای جلوگیری از Overriding بیشتر virtual method ها در طی ارث بری استفاده می شود .

به مثال زیر توجه کنید .

    public class ClassA  
    {  
        public virtual void Method1()  
        {  
        }  
    }  
      
    public class ClassB : ClassA  
    {  
        public override void Method1()  
        {  
        }  
    }  
      
    public class ClassC : ClassB  
    {  
        public override void Method1()  
        {  
        }  
    }  
      
    public class ClassD : ClassC  
    {  
        public override void Method1()  
        {  
        }  
    }  

کد بالا به درستی کار میکند و هنگام کامپایل با خطا مواجه نمی شود .

حالا کلمه Sealed را هنگام overriding  متد1 در کلاس C اضافه میکنیم .

    public class ClassA  
    {  
        public virtual void Method1()  
        {  
        }  
    }  
      
    public class ClassB : ClassA  
    {  
        public override void Method1()  
        {  
        }  
    }  
      
    public class ClassC : ClassB  
    {  
        public sealed override void Method1()  
        {  
        }  
    }  
      
    public class ClassD : ClassC  
    {  
        public override void Method1()  
        {  
        }  
    }  

هنگام کامپایل کد ، خطای زیر مشاهده می شود .

'ConsoleApplication1.ClassD.Method1()': cannot override inherited member 'ConsoleApplication1.ClassC.Method1()' because it is sealed

مثال های بالا چگونگی کار کلمه کلیدی sealed با متد ها را نشان می دهند . 

آموزش سی شارپ

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان
  • C#.net
  • 2k بازدید
  • 1 تشکر

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید