जवाबों:
finalकीवर्ड जावा में कई प्रयोगों है। यह C # sealedऔर readonlyकीवर्ड दोनों से मेल खाता है , यह उस संदर्भ पर निर्भर करता है जिसमें इसका उपयोग किया गया है।
उपवर्ग (परिभाषित वर्ग से विरासत) को रोकने के लिए:
जावा
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चिह्नित करता है , जबकि C # उन्हें चिह्नित करता है sealed। इसलिए, आपको केवल sealedC # में कीवर्ड का उपयोग करने की आवश्यकता है, यदि आप एक विधि के आगे ओवरराइडिंग को रोकना चाहते हैं जिसे स्पष्ट रूप virtualसे आधार वर्ग में चिह्नित किया गया है ।
केवल एक चर को एक बार सौंपा जा सकता है:
जावा
public final double pi = 3.14; // essentially a constant
सी#
public readonly double pi = 3.14; // essentially a constant
एक तरफ ध्यान दें, के प्रभाव के रूप में readonlyकी है कि तैयार किए गए कीवर्ड अलग है constमें उस कीवर्ड readonlyअभिव्यक्ति पर मूल्यांकन किया जाता है क्रम के बजाय संकलन समय है, इसलिए मनमाना भाव की इजाजत दी।
readonlyसदस्य चर को कंस्ट्रक्टर्स में संशोधित किया जा सकता है: pastebin.com/AzqzYGiA
ये संदर्भ पर निर्भर करता है।
finalवर्ग या विधि के लिए, C # समतुल्य हैsealed ।finalफ़ील्ड के लिए, C # समतुल्य हैreadonly ।finalस्थानीय चर या विधि पैरामीटर, वहाँ कोई सीधा सी # बराबर है।For a final local variable or method parameter, there's no direct C# equivalentएक विशाल अंतर के लिए।
constकेवल मूल्य प्रकारों पर उपयोग किया जा सकता है। जहां तक मुझे पता है कि स्थानीय संदर्भ प्रकार के लिए एक प्रभावी निरंतर बनाने का कोई तरीका नहीं है।
यहाँ जो सब याद आ रहा है वह है अंतिम सदस्य चर के लिए निश्चित असाइनमेंट की जावा की गारंटी।
अंतिम सदस्य चर V के साथ एक वर्ग C के लिए, C के प्रत्येक निर्माता के माध्यम से हर संभव निष्पादन पथ को एक बार V को असाइन करना होगा - V को असाइन करने या V दो या अधिक बार असाइन करने में विफल होने पर त्रुटि होगी।
C # के आसानी से पढ़े जाने वाले कीवर्ड की ऐसी कोई गारंटी नहीं है - कंपाइलर को रीडओनल सदस्यों को बिना बताए छोड़ने की खुशी से अधिक है या आप उन्हें एक कंस्ट्रक्टर के भीतर कई बार असाइन करने की अनुमति देते हैं।
तो, अंतिम और आसानी से (कम से कम सदस्य चर के संबंध में) निश्चित रूप से समतुल्य नहीं हैं - अंतिम बहुत अधिक सख्त है।
जैसा कि उल्लेख किया गया है, विधियों और वर्गों sealedके finalलिए एक बराबर है ।
बाकी के लिए, यह जटिल है।
के लिए static finalखेतों, static readonlyनिकटतम बात संभव है। यह आपको स्थिर क्षेत्र में स्थिर क्षेत्र को इनिशियलाइज़ करने की अनुमति देता है, जो जावा में स्थिर इनिशियलाइज़र के समान है। यह स्थिरांक (प्राथमिक और अपरिवर्तनीय वस्तुओं) और उत्परिवर्तित वस्तुओं के निरंतर संदर्भों पर लागू होता है।
constसंशोधक काफी स्थिरांक के लिए इसी तरह की है, लेकिन आप उन्हें एक स्थिर निर्माता में निर्धारित नहीं कर सकते।
readonlyइसका उपयोग किया जा सकता है। हालांकि यह बराबर नहीं है - finalनिर्माणकर्ता या इनिशियलाइज़र में भी बिल्कुल एक असाइनमेंट की आवश्यकता होती है।मेरे द्वारा ज्ञात finalस्थानीय चर के लिए कोई C # समतुल्य नहीं है । यदि आप सोच रहे हैं कि किसी को इसकी आवश्यकता क्यों होगी: आप किसी अन्य से पहले एक चर घोषित कर सकते हैं, स्विच-केस या तो। इसे अंतिम घोषित करके, आप यह लागू करते हैं कि इसे एक बार में सौंपा गया है।
सामान्य रूप से जावा स्थानीय चर को पढ़ने से पहले कम से कम एक बार सौंपा जाना आवश्यक है। जब तक मान पढ़ने से पहले शाखा कूद नहीं जाती, तब तक एक अंतिम चर बिल्कुल ठीक सौंपा जाता है। यह सब संकलन-समय की जाँच की जाती है। यह एक त्रुटि के लिए कम मार्जिन के साथ अच्छी तरह से व्यवहार कोड की आवश्यकता है।
सारांशित, C # का कोई प्रत्यक्ष समकक्ष नहीं है final। जबकि जावा में C # की कुछ अच्छी विशेषताओं का अभाव है, यह मेरे लिए ताज़ा है क्योंकि ज्यादातर जावा प्रोग्रामर यह देखने के लिए कि C # एक समतुल्य वितरित करने में विफल रहता है।
जावा वर्ग अंतिम और विधि अंतिम -> सील। जावा सदस्य चर फाइनल -> क्रमिक स्थिरांक के लिए आसानी से, संकलन समय स्थिरांक के लिए कास्ट।
स्थानीय चर अंतिम और विधि तर्क अंतिम के लिए कोई समकक्ष नहीं है
C # कॉन्स्टेंट को कॉन्स्टाइल टाइम कॉन्स्टेंट या रनटाइम कॉन्स्टेंट के लिए रीडोनली कीवर्ड के लिए कॉन्स्टेबल कीवर्ड का उपयोग करके घोषित किया जाता है। स्थिरांक का शब्दार्थ C # और Java दोनों भाषाओं में समान है।