ऐसा लगता है कि सीलिंग पर आधिकारिक Microsoft दिशानिर्देश इस प्रश्न के ~ 9 साल पहले पूछे जाने के बाद विकसित हुए हैं, और वे ऑप्ट-इन दर्शन (डिफ़ॉल्ट रूप से सील) से ऑप्ट-आउट करने के लिए चले गए (डिफ़ॉल्ट रूप से सील न करें):
X ऐसा करने का एक अच्छा कारण के बिना कक्षाओं को सील न करें।
एक वर्ग को सील करना क्योंकि आप एक एक्स्टेंसिबिलिटी परिदृश्य के बारे में नहीं सोच सकते हैं एक अच्छा कारण नहीं है। फ्रेमवर्क उपयोगकर्ता विभिन्न गैर-स्पष्ट कारणों के लिए कक्षाओं से विरासत में लेना पसंद करते हैं, जैसे सुविधा सदस्यों को जोड़ना। गैर-स्पष्ट कारणों के उदाहरणों के लिए अवांछित कक्षाएं देखें जिन्हें उपयोगकर्ता एक प्रकार से प्राप्त करना चाहते हैं।
कक्षा को सील करने के अच्छे कारणों में निम्नलिखित शामिल हैं:
- वर्ग एक स्थिर वर्ग है। स्टैटिक क्लास डिजाइन देखें।
- वर्ग विरासत में सुरक्षित संरक्षित सदस्यों में सुरक्षा-संवेदनशील रहस्यों को संग्रहीत करता है।
- वर्ग कई आभासी सदस्यों को विरासत में मिला है और उन्हें व्यक्तिगत रूप से सील करने की लागत ने वर्ग को छोड़ने के लाभों को आगे बढ़ाया है।
- वर्ग एक विशेषता है जिसे बहुत तेज़ रनटाइम लुक-अप की आवश्यकता होती है। सील विशेषताओं में अनसाल्ड की तुलना में थोड़ा अधिक प्रदर्शन स्तर होता है। विशेषताएँ देखें।
X मुहरबंद प्रकारों पर संरक्षित या आभासी सदस्यों की घोषणा न करें ।
परिभाषा के अनुसार, सील किए गए प्रकारों को विरासत में नहीं दिया जा सकता है। इसका मतलब यह है कि सील किए गए प्रकारों पर संरक्षित सदस्यों को नहीं बुलाया जा सकता है, और सील किए गए प्रकारों पर आभासी तरीकों को ओवरराइड नहीं किया जा सकता है।
✓ CONSIDER सील करने वाले सदस्य जिन्हें आप ओवरराइड करते हैं। वर्चुअल सदस्यों (वर्चुअल सदस्यों में चर्चा किए गए) को शुरू करने के परिणामस्वरूप होने वाली समस्याएं ओवरराइड्स पर लागू होती हैं, हालांकि कुछ हद तक कम। एक ओवरराइड सील करने से आपको इन समस्याओं से विरासत में पदानुक्रम की शुरुआत होती है।
वास्तव में, यदि आप ASP.Net कोर कोडबेस को खोजते हैं , तो आप केवल 30 घटनाओं के बारे में पाएंगे sealed class, जिनमें से अधिकांश विशेषताएँ और परीक्षण कक्षाएं हैं।
मुझे लगता है कि सीलिंग के पक्ष में अपरिवर्तनीय संरक्षण एक अच्छा तर्क है।