c# - सी#में जावा के फाइनल के बराबर क्या है?




access-modifiers reserved-words (5)

सी # में जावा के final के बराबर क्या है?


जावा क्लास फ़ाइनल और विधि अंतिम -> मुहरबंद। जावा सदस्य चर अंतिम -> रनटाइम निरंतर के लिए केवल पढ़ने के लिए, स्थिर समय संकलन के लिए आधार।

स्थानीय चरणीय अंतिम और विधि तर्क अंतिम के लिए कोई समकक्ष नहीं है


जैसा कि बताया गया है, sealed विधियों और वर्गों के लिए final बराबर है।

बाकी के लिए, यह जटिल है।

  • घोषणा में परिभाषित एक (स्थैतिक) निरंतर, const को समकक्ष माना जा सकता है, बशर्ते कि यह एक आदिम प्रकार या एक अपरिवर्तनीय वर्ग है।
  • एक क्षेत्र पर जिसे इसे कन्स्ट्रक्टर छोड़ने के बाद पुन: असाइन नहीं किया जाना चाहिए, readonly लिए उपयोग किया जा सकता है, लेकिन यह बराबर नहीं है - final को कन्स्ट्रक्टर में भी एक असाइनमेंट की आवश्यकता होती है।
  • एक स्थानीय वैरिएबल जिसे केवल एक बार असाइन किया जाना चाहिए, सी # में नहीं बनाया जा सकता है, मुझे लगता है। यदि आप सोच रहे हैं कि किसी को इसकी आवश्यकता क्यों होगी: यदि आप switch-case या तो कुछ से पहले एक चर घोषित कर सकते हैं। इसे अंतिम रूप में घोषित करके, आप यह लागू करते हैं कि यह बिल्कुल एक बार असाइन किया गया है, यदि नहीं, तो संकलक त्रुटि होती है। इसके लिए अच्छी तरह से व्यवहार कोड की आवश्यकता है, इसलिए कम त्रुटियां हैं।

संक्षेप में, सी # के पास final का कोई प्रत्यक्ष समकक्ष नहीं है। जबकि जावा में सी # की कुछ अच्छी विशेषताएं हैं, लेकिन यह मेरे लिए रीफ्रेशिंग है क्योंकि ज्यादातर जावा प्रोग्रामर यह देखने के लिए कहां सी # समकक्ष वितरित करने में विफल रहता है।


ये संदर्भ पर निर्भर करता है।

  • final श्रेणी या विधि के लिए, sealed
  • final क्षेत्र के लिए, readonly
  • final स्थानीय चर या विधि पैरामीटर के लिए, कोई प्रत्यक्ष सी # समतुल्य नहीं है।

सील


final कीवर्ड में जावा में कई उपयोग हैं। यह उस संदर्भ के आधार पर सी # में sealed और readonly कीवर्ड दोनों से मेल खाता है, जिसका उपयोग किया जाता है।

कक्षाएं

उपclassing (परिभाषित वर्ग से विरासत) को रोकने के लिए:

जावा

public final class MyFinalClass {...}

सी#

public sealed class MyFinalClass {...}

तरीके

virtual विधि को ओवरराइड करना रोकें।

जावा

public class MyClass
{
    public final void myFinalMethod() {...}
}

सी#

public class MyClass : MyBaseClass
{
    public sealed override void MyFinalMethod() {...}
}

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

चर

केवल एक चर को एक बार असाइन करने की अनुमति दें:

जावा

public final double pi = 3.14; // essentially a constant

सी#

public readonly double pi = 3.14; // essentially a constant

एक साइड नोट के रूप में, readonly कीवर्ड का प्रभाव readonly कीवर्ड से अलग होता है जिसमें readonly अभिव्यक्ति का संकलन समय के बजाए रनटाइम पर मूल्यांकन किया जाता है , इसलिए मनमाने ढंग से अभिव्यक्ति की अनुमति मिलती है।







reserved-words