بخش پنجم
• Sealed Class
در Net framework. همچون معماری جاوا، راهی برای جلوگیری از ارث بری بیشتر از یك كلاس وجود دارد. Sealed Class ها، كلاسهایی هستند كه شما نمی توانید از آنها برای كلاس دیگری به ارث ببرید. این ویژگی الان در دلفی Win32 نيز وجود دارد.
شكل كلی :
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
به این معنی ست كه از كلاس TinheritedClass ، كلاس دیگری نمیتواند به ارث ببرد .
مثال :
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
از این به بعد نمی توانیم كلاس دیگری را از كلاس TBaseDeriv به ارث ببریم.
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
در این صورت با پیغام خطای كامپایلر مواجه خواهید شد : "Cannot extend sealed class TbaseDeriv" .
فراموش نكنید كه Abstract و Sealed را با هم نمی توانید به كار ببرید.
• Final Method
با Sealed class میتوانید یك كلاس را به صورت كامل از ارث بری محروم كنید. بعضی مواقع هم نیاز دارید كه از ارث بری متدی كه به صورت virtual تعریف شده است جلوگیری كنید.
برای این كار میتوانید از Final Method ها استفاده كنید.
مثال :
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
از این به بعد كلاسی كه از كلاس TbaseDeriv به ارث ببرد ، نمیتواند متد A را override كند. در غیر اینصورت با پیغام خطای كامپایلر مواجه میشود : "Cannot override a final method" .
خوب، حالا ممكن است كه از خودتان سئوال كنید كه چه دلیلی پشت سر این دو مفهوم وجود دارد؟ ممكن ست بخواهید سایرین را از ارث بری كلاس به صورت عمومی منع كنید و مخصوصا" میخواهید كه از ارث بری كلاسهای Security یا Cryptography توسط دیگران جلوگیری كنید، در این زمان این دو مفهوم به شما كمك میكنند.
از نظر من تا جای ممكن باید از استفاده از این ویژگی در یك كتابخانه خودداری كرد و اجازه دهیم كه برنامه نویسان از كلاسهای موجود نهایت استفاده را بكنند، مگر در شرایط خاص كه مطمئنا" پیش خواهد آمد.
با این حال اگر نگاهی به كتابخانه های مایكروسافت برای دات نت بیاندازید ، sealed class و final methodهای بیشماری را پیدا خواهید كرد.
• Class Helper
زمانیكه بورلند كار بر روی دلفی دات نت را آغاز كرد، یكی از مشكلاتی كه ظاهر شد؛ نیاز به تطبیق برخی از كلاسهای پایه دلفی (مانند Tobject، Exception) با كلاسهای .Net Framework بود. بعد از كمی تحقیق ، ایده ای متحیر كننده به نام Class Helper عرضه شد. Class Helper چیزی نیست به جز نوعی كلاس كه موقعیكه در كلاس دیگری شركت كند ، متدها و ویژگیهای بیشتری را مطرح میكند كه ممكن ست شما در متن كلاس اصلی از این متدها و ویژگیهای اضافه تر استفاده كنید. Class Helper راهی ست برای توسعه كلاس، بدون استفاده از مفهوم وراثت یا همان Inheritance. به عبارت دیگر ، شما یك Class Helper ایجاد میكنید تا متدهای آن به كلاس موجود اضافه شود. این قابلیت به غیر از دلفی .Net در دلفی Win32 نیز قابل استفاده هست.
شكل كلی :
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
نمونه :
تعریف ساختار كلاس اصلی :
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
تعریف Class Helper برای كلاس TmyObject كه در بالا تعریف شده است :
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
پیاده سازی كلاس اصلی :
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
پیاده سازی Class Helper :
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
استفاده از كلاس TmyObject :
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
می بینید كه متد Show كه در Class Helper یی با نام TmyObjectHelper تعریف شده به سادگی توسط كلاس اصلی قابل استفاده هست. بعد از اجرای متد Show به مقداری كه ClassName توسط ShowMessage نمایش می دهد دقت كنید.