स्थैतिक और सील वर्ग अंतर


150
  1. क्या कोई वर्ग है जिसे स्थिर वर्ग में लागू किया गया है? माध्यम:

    static class ABC : Anyclass
  2. क्या कोई ऐसा वर्ग है जिसे सील्ड क्लास और स्टैटिक क्लास दोनों में विरासत में मिला है?
    माध्यम:

    static class ABC : AClass {}

    तथा

    sealed class ABC : AClass {}

क्या मैं कुछ हद तक गलत हो सकता हूं?


staticवास्तव में कुछ नहीं करना हैsealed
ken2k

1
लेकिन @ ken2k, C # में स्थिर वर्गों को डिफ़ॉल्ट रूप से सील कर दिया जाता है। क्या वे नहीं हैं? स्थिर वर्ग विरासत में बिल्कुल भी भाग नहीं लेते हैं।
RBT

जवाबों:


654

यह आपकी मदद कर सकता है:

+--------------+---+-------------------------+------------------+---------------------+
|  Class Type  |   | Can inherit from others | Can be inherited | Can be instantiated | 
|--------------|---|-------------------------+------------------+---------------------+
| normal       | : |          YES            |        YES       |         YES         |
| abstract     | : |          YES            |        YES       |         NO          |
| sealed       | : |          YES            |        NO        |         YES         |
| static       | : |          NO             |        NO        |         NO          |
+--------------+---+-------------------------+------------------+---------------------+

1
बहुत बढ़िया। त्वरित प्रतिक्रिया के लिए धन्यवाद @HosseinNarimaniRad मैं आपको सुबह ही हटा दिया था क्योंकि जानकारी वैसे भी सही थी, लेकिन यह सिर्फ एक प्रारूपण मुद्दा था। Btw, आपका उत्तर उस क्षण से स्वीकृत उत्तर होने का हकदार है, लेकिन ऐसा लगता है कि हमें इसके लिए और अधिक इंतजार करना होगा :)
RBT

इसके आधार पर अन्य प्रकारों के बारे में सोचना दिलचस्प है। कुछ की तरह root classजो विरासत में मिला है और त्वरित किया जा सकता है, लेकिन विरासत में नहीं मिल सकता है। निश्चित नहीं कि यह उपयोगी क्यों होगा, लेकिन फिर भी
ऑस्टिन ब्रायन

static class Foo : object { }मान्य है, लेकिन अनिवार्य रूप से है static class Foo { }
थीमफील्ड

39

सरल शब्दों में

स्टेटिक क्लास

एक वर्ग को स्थिर घोषित किया जा सकता है, यह दर्शाता है कि इसमें केवल स्थिर सदस्य हैं। नए कीवर्ड का उपयोग करके स्थिर वर्ग के उदाहरण बनाना संभव नहीं है। जब प्रोग्राम या नेमस्पेस क्लास लोड किया जाता है, तो स्थैतिक कक्षाएं .NET फ्रेमवर्क सामान्य भाषा रनटाइम (CLR) द्वारा स्वचालित रूप से लोड की जाती हैं।

सील्ड क्लास

एक सील वर्ग को आधार वर्ग के रूप में इस्तेमाल नहीं किया जा सकता है। व्युत्पन्न को रोकने के लिए सील वर्गों का उपयोग मुख्य रूप से किया जाता है। क्योंकि उन्हें कभी भी बेस क्लास के रूप में इस्तेमाल नहीं किया जा सकता है, कुछ रन-टाइम ऑप्टिमाइजेशन कॉलिंग क्लास के सदस्यों को थोड़ा तेज कर सकते हैं।


19

आप एक sealedवर्ग को दूसरे वर्ग से विरासत में दे सकते हैं , लेकिन आप एक वर्ग से विरासत में नहीं मिल सकते sealed:

sealed class MySealedClass : BaseClass // is ok
class MyOtherClass : MySealedClass     // won't compile

एक staticवर्ग अन्य वर्गों से विरासत में नहीं मिल सकता है।


3

आप बस उन दोनों को अलग कर सकते हैं:

       Sealed Class       |        Static Class
--------------------------|-------------------------
it can inherit From other | it cannot inherit From other
classes but cannot be     | classes as well as cannot be
inherited                 | inherited

3

सरल उत्तर यह है कि सीलबंद वर्ग का उपयोग आधार वर्ग के रूप में नहीं किया जा सकता है

मैं आपको दिखाने की कोशिश कर रहा हूं कि सील किया गया वर्ग नीचे दिए गए कोड में एक व्युत्पन्न वर्ग है

 public sealed class SealedClass : ClassBase
{
    public override void Print()
    {
        base.Print();
    }
}

और एक अन्य सील सुविधा केवल इसके उदाहरण से सुलभ है। (आप इससे विरासत में प्राप्त नहीं कर सकते हैं)

 class Program
{
    static void Main(string[] args)
    {
        SealedClass objSeald = new SealedClass();
        objSeald.Name = "Blah blah balh";
        objSeald.Print();

    }
}

1

सील कक्षाएं:

  1. उदाहरण बना सकते हैं, लेकिन वारिस नहीं कर सकते
  2. स्थिर और साथ ही गैर-स्थिर सदस्य हो सकते हैं।

स्थिर वर्ग:

  1. न तो उनके उदाहरण बना सकते हैं, न ही उन्हें विरासत में दे सकते हैं
  2. स्थिर सदस्य ही हो सकते हैं।

0

1 - नहीं, आप एक स्थिर वर्ग को लागू नहीं कर सकते।

2 - नहीं, आप एक स्थिर या सील वर्ग से विरासत में नहीं मिल सकते हैं


4
हो सकता है कि आप उस पर थोड़ा स्पष्टीकरण जोड़ सकें।
अब्दुल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.