2012-04-16 13 views
10

क्या कोई मुझे कृपया बताएगा कि sealed का निम्नलिखित उपयोग संकलित नहीं है? हालांकि, अगर मैं sealedfinal के साथ प्रतिस्थापित करता हूं और इसे जावा के रूप में संकलित करता हूं, तो यह काम करता है।सी # सीलबंद बनाम जावा फाइनल

private sealed int compInt = 100; 
public bool check(int someInt) 
{ 
    if (someInt > compInt) 
    { 
     return true; 
    } 
    return false; 
} 
+0

http://stackoverflow.com/questions/2069010/is-there-any-functional-difference-between-c-sharp-sealed-and-javas-final-keywo –

+0

बराबर करने के लिए: इस छवि की जाँच करें सी # में सदस्यों के लिए 'अंतिम' 'readonly' है। –

उत्तर

45

ऐसा इसलिए है क्योंकि जावा में final जहां सी # में जबकि sealed इसका इस्तेमाल पर निर्भर करता है अलग अलग बातें की बहुत मतलब है पर लागू होता है केवल वर्गों और संभावित रूप से आभासी सदस्यों (विधियों, गुण, घटनाओं) करने के लिए।

जावा final में लागू किया जा सकता:

  • कक्षाएं, जिसका अर्थ है कि वर्ग विरासत में मिला नहीं किया जा सकता। यह सी # के sealed के बराबर है।
  • विधियां, जिसका अर्थ है कि विधि व्युत्पन्न कक्षा में ओवरराइड नहीं की जा सकती है। यह सी # में डिफ़ॉल्ट है, जब तक कि आप virtual के रूप में कोई विधि घोषित नहीं करते हैं और व्युत्पन्न कक्षा में इसे sealed के साथ आगे व्युत्पन्न कक्षाओं के लिए रोका जा सकता है।
  • फ़ील्ड्स और चर, जिसका अर्थ है कि उन्हें केवल एक बार आरंभ किया जा सकता है। फ़ील्ड के लिए सी #में बराबर है।
+1

"सी # में मुहरबंद केवल कक्षाओं पर लागू होता है" - यह सच नहीं है, इसे सी # में विधियों पर लागू किया जा सकता है। – Maxim

2

C# में Sealed एक संदर्भ प्रकार के लिए एक ही लागू किया जा सकता है, और विरासत पेड़ पर प्रभाव पड़ता है।

प्रैक्टिस में sealed के रूप में चिह्नित प्रकार को विरासत पेड़ में अंतिम "पत्ता" होने के लिए चिह्नित किया गया है, या संक्षेप में, आप sealed जैसे घोषित प्रकार से प्राप्त नहीं कर सकते हैं।

public sealed class Child : Base 
{ 
} 

public class AnotherAgain : Child //THIS IS NOT ALLOWED 
{ 
} 

इसे किसी सदस्यों पर लागू नहीं किया जा सकता है।

2

टिग्रेन का जवाब गलत नहीं है जबकि जॉय थोड़ा गलत है।
सबसे पहले आप इस पृष्ठ को देख सकते हैं: What is the equivalent of Java's final in C#?
sealed कुंजी शब्द class, instance method और property पर लागू हो सकता है लेकिन चर या इंटरफ़ेस के तरीकों पर लागू नहीं हो सकता है। sealed के साथ कक्षाएं विरासत में नहीं मिल सकती हैं। जब sealed विधि पर डाल दिया जाता है, तो यह कंपनी में override होना चाहिए। प्रत्येक structsealed है, इसलिए struct विरासत में नहीं मिला जा सकता है। sealed usage

संबंधित मुद्दे