כאשר אנחנו כותבים מחלקות משלנו, באפשרותנו להפוך אותן להיות sealed, כלומר אטומות.
מחלקה שהיא sealed היא מחלקה שלא ניתן לרשת ממנה ולכן לא ניתן להרחיב אותה.
כדי להפוך מחלקה לsealed פשוט נשים את הKeyword ששמו sealed בהגדרה שלה:
|
|
היתרונות בלהפוך מחלקה לsealed:
- יכול להיות שיש לנו מחלקה שאנחנו לא באמת רוצים לחשוף החוצה, היא די פנימית. עכשיו במקרה היא public וגם לא sealed. מה שקורה אחרי זה, זה שאנחנו מגלים שמישהו ירש מהמחלקה שלנו ודרס כמה פונקציות, כאשר הוא לא היה אמור באמת להרחיב את המחלקה.
- במידה וקורה מה שמתואר בסעיף הקודם, ייתכן ועכשיו צריך לדאוג לתמוך לאחור בAPI ישן (למשל, חתימות של פונקציות שהן protected) כיוון שלא חשבנו על האפשרות שמישהו ירש מהמחלקה שלנו.
- קריאה לפונקציה וירטואלית שנדרסת ע"י מחלקה שהיא sealed (ע"י החזקת Reference מסוג מחלקה זו) גורמת לאופטימיזציה בJIT בקריאה לפקודת callvirt, מאחר ואין צורך לבדוק לאיזה פונקציה התכוון המתכנת לקרוא.
- בריצה באמצעות לולאת foreach יש לנו יותר Type-safety במחלקות שהן sealed (ראו גם טיפ מספר 52)
שימו לב שמחלקות סטטיות לא יכולות "sealed" מאחר ואין בהן מתודות וירטאליות שניתן לדרוס:
|
|
Error: ‘MyStaticClass’: a class cannot be both static and sealed
מצד שני, לעולם לא ניתן להרחיבן:
|
|
Error: Static class ‘MyOtherStaticClass’ cannot derive from type ‘MyStaticClass’. Static classes must derive from object.
כך שהן סוג של "sealed"…
שבוע לא סגור טוב