सामान्य टाइप प्रणाली (सीटीएस): Difference between revisions

From Vigyanwiki
Line 18: Line 18:
सामान्य प्रकार की प्रणाली दो प्रकार की सामान्य श्रेणियों का समर्थन करती है:
सामान्य प्रकार की प्रणाली दो प्रकार की सामान्य श्रेणियों का समर्थन करती है:


'''मूल्य प्रकार'''
'''मान टाइप'''


मूल्य प्रकारों में सीधे उनका डेटा होता है, और मूल्य प्रकारों के उदाहरण या तो [[कॉल स्टैक]] पर आवंटित किए जाते हैं या संरचना में पंक्ति के भीतर आवंटित किए जाते हैं। मूल्य प्रकार अंतर्निहित अर्थात रनटाइम द्वारा कार्यान्वित, उपयोगकर्ता परिभाषित, या गणना के रूप मे हो सकते हैं।
मान प्रकारों में सीधे उनका डेटा होता है, और मान प्रकारों के उदाहरण या तो [[कॉल स्टैक]] पर आवंटित किए जाते हैं या संरचना में पंक्ति के भीतर आवंटित किए जाते हैं। मान प्रकार अंतर्निहित अर्थात रनटाइम द्वारा कार्यान्वित, उपयोगकर्ता परिभाषित, या गणना के रूप मे हो सकते हैं।
;[[संदर्भ प्रकार]]: संदर्भ प्रकार मान के मेमोरी पते के लिए एक संदर्भ संग्रहीत करते हैं, और यह हीप पर आवंटित होते हैं। संदर्भ प्रकार स्व-वर्णनात्मक प्रकार, पॉइंटर प्रकार या इंटरफेस प्रकार हो सकते हैं। संदर्भ टाइप का प्रकार स्व-वर्णनात्मक टाइपों के मानों से निर्धारित किया जा सकता है। स्व-वर्णनात्मक प्रकार विस्तार से ऐरे और कक्षा प्रकार में विभाजित होते हैं। कक्षा प्रकार उपयोगकर्ता-निर्मित कक्षाओं, बॉक्स्ड मान प्रकार और डेलीगेट्स को समेकित करते हैं।
;[[संदर्भ प्रकार|संदर्भ टाइप]]: संदर्भ टाइप, मान के मेमोरी पते के लिए एक संदर्भ संग्रहीत करते हैं, और यह हीप पर आवंटित होते हैं। संदर्भ टाइप स्व-वर्णनात्मक टाइप, पॉइंटर टाइप या इंटरफेस टाइप हो सकते हैं। संदर्भ टाइप का प्रकार स्व-वर्णनात्मक टाइपों के मानों से निर्धारित किया जा सकता है। स्व-वर्णनात्मक टाइप विस्तार से ऐरे और वर्ग टाइप में विभाजित होते हैं। वर्ग टाइप उपयोगकर्ता-निर्मित वर्गों, बॉक्स्ड मान टाइप और डेलीगेट्स को समेकित करते हैं।


विसुअल बेसिक .नेट  में लिखा गया निम्न उदाहरण संदर्भ प्रकारों और [[मान प्रकार|मान प्रकारों]] के मध्य अंतर को दर्शाता है:
विसुअल बेसिक .नेट  में लिखा गया निम्न उदाहरण संदर्भ टाइप और [[मान प्रकार|मान टाइप]] के मध्य अंतर को दर्शाता है:
<syntaxhighlight lang="vbnet">
<syntaxhighlight lang="vbnet">
Imports System
Imports System
Line 52: Line 52:


=== बॉक्सिंग ===
=== बॉक्सिंग ===
मूल्य प्रकारों को संदर्भ प्रकारों में परिवर्तित करना बॉक्सिंग (कंप्यूटर विज्ञान) के रूप में भी जाना जाता है। जैसा कि नीचे दिए गए उदाहरण में देखा जा सकता है, यह आवश्यक नहीं है कि कंपाइलर को Int32 को किसी वस्तु के लिए बॉक्सिंग किया जाए, क्योंकि यह स्वयं इसका ख्याल रखता है।
मान प्रकारों को संदर्भ टाइपों में परिवर्तित करना कंप्यूटर विज्ञान में बॉक्सिंग के रूप में भी जाना जाता है। जैसा कि नीचे दिए गए उदाहरण में देखा जा सकता है, कंपाइलर को यह बताना आवश्यक नहीं है कि Int32 को किसी वस्तु के लिए बॉक्स किया गया है, क्योंकि कंपाइलर स्वयं इसका ध्यान रखता है।
<syntaxhighlight lang="csharp">
<syntaxhighlight lang="csharp">
Int32 x = 10;  
Int32 x = 10;  
Line 58: Line 58:
Console.WriteLine("The Object o = {0}",o); // prints out "The Object o = 10"
Console.WriteLine("The Object o = {0}",o); // prints out "The Object o = 10"
</syntaxhighlight>
</syntaxhighlight>
हालाँकि, एक Int32 को हमेशा इस तरह स्पष्ट रूप से बॉक्स किया जा सकता है:
यद्यपि, एक Int32 को सदैव निम्नलिखित प्रकार द्वारा स्पष्ट रूप से बॉक्स किया जा सकता है:
<syntaxhighlight lang="csharp">
<syntaxhighlight lang="csharp">
Int32 x = 10;  
Int32 x = 10;  
Line 67: Line 67:


=== अनबॉक्सिंग ===
=== अनबॉक्सिंग ===
निम्न उदाहरण यह दिखाने का इरादा रखता है कि किसी संदर्भ प्रकार को मान प्रकार पर वापस कैसे अनबॉक्स किया जाए। सबसे पहले एक Int32 को किसी ऑब्जेक्ट में बॉक्स किया जाता है, और फिर इसे फिर से अनबॉक्स किया जाता है। ध्यान दें कि अनबॉक्सिंग के लिए स्पष्ट कास्ट की आवश्यकता होती है।
निम्न उदाहरण में दिखाया गया है कि कैसे एक रेफरेंस टाइप को वैल्यू टाइप में अनबॉक्स किया जाए। पहले एक Int32 को एक ऑब्जेक्ट में बॉक्स किया जाता है, और फिर उसे फिर से अनबॉक्स किया जाता है। यह ध्यान दें कि अनबॉक्सिंग के लिए निर्दिष्ट कास्ट की आवश्यकता होती है।
<syntaxhighlight lang="csharp">
<syntaxhighlight lang="csharp">
Int32 x = 5;  
Int32 x = 5;  
Line 76: Line 76:


== यह भी देखें ==
== यह भी देखें ==
*।शुद्ध रूपरेखा
*शुद्ध रूपरेखा
* [[ब्लिटेबल प्रकार]]
* [[ब्लिटेबल प्रकार]]
* सामान्य भाषा अवसंरचना
* सामान्य भाषा अवसंरचना

Revision as of 01:34, 24 June 2023

माइक्रोसॉफ्ट के .नेट फ्रेमवर्क में, सामान्य टाइप प्रणाली (सीटीएस) एक मानक है जो निर्दिष्ट करता है कि कंप्यूटर मेमोरी में टाइप परिभाषा तथा विशेष प्रकार के मान कैसे प्रतिष्ठित किए जाते हैं। इसका उद्देश्य विभिन्न प्रोग्रामिंग भाषाओं में लिखे गए प्रोग्रामों को सरलता से जानकारी साझा करने की अनुमति देना है। प्रोग्रामिंग भाषाओं में, टाइप को, मानों के वर्ग; उदाहरण के लिए, "0 से 10 तक के सभी पूर्णांक" तथा उन मानों पर संभव संक्रियाओं; उदाहरण के लिए, जोड़ने और घटाने के अनुमति की परिभाषा के रूप में वर्णित किया जा सकता है।

सीटीएस के लिए विनिर्देश एक्मा मानक 335, सामान्य भाषा अवसंरचना (सीएलआई) विभाजन I से VI में निहित है। कॉमन लैंग्वेज इन्फ्रास्ट्रक्चर और सीटीएस माइक्रोसॉफ्ट द्वारा निर्मित किए गए थे, तथा .नेट फ्रेमवर्क, इसी मानक का कार्यान्वयन है।

सामान्य टाइप प्रणाली के कार्य

  • एक ऐसा ढांचा स्थापित करना, जो भाषाओं के बीच संगठन, टाइप सुरक्षा और ऊच्च प्रदर्शन को सक्षम करने में मदद करता है।
  • एक वस्तु-उन्मुख प्रारूप प्रदान करना जो कई प्रोग्रामिंग भाषाओं के पूर्ण कार्यान्वयन का समर्थन करता है।
  • विभिन्न भाषाओं में लिखे गए ऑब्जेक्ट्स एक दूसरे के साथ संवाद कर सकें, इसे सुनिश्चित करने के लिए नियमों को परिभाषित करना।
  • सीटीएस उन नियमों को भी परिभाषित करता है जो यह सुनिश्चित करते हैं कि विभिन्न भाषाओं में लिखे गए डेटा प्रकार के ऑब्जेक्ट एक दूसरे के साथ संवाद करने में सक्षम हैं।
  • सीटीएस, टाइप की दृश्यता और सदस्यों तक पहुंच के नियमों को भी निर्धारित करता है, अर्थात् सीटीएस, टाइप के लिए दशमा निर्धारित करने के नियमों की स्थापना करता है, और कॉमन भाषा रनटाइम दृश्यता नियमों का पालन करता है।
  • सीटीएस, टाइप वंशानुक्रम , वर्चुअल मेथड्स और ऑब्जेक्ट लाइफटाइम को नियंत्रित करने वाले नियमों को परिभाषित करता है।
  • .नेट द्वारा समर्थित भाषाएँ सभी या कुछ सामान्य डेटा टाइप को लागू कर सकती हैं।

अंशमान्य मानों को पूर्णांकित करते समय, फ्रेमवर्क के भीतर स्वतः निर्धारित रूप से हैफ़्ट-टू-इवन विधि का उपयोग किया जाता है। दूसरे संस्करण से पूर्व, "सममिति गणितीय पूर्णांकन" केवल प्रोग्रामर के विकल्प के रूप में उपलब्ध था।[1]

  • इसका उपयोग अन्य भाषाओं के साथ संवाद करने के लिए किया जाता है

टाइप श्रेणियां

सामान्य प्रकार की प्रणाली दो प्रकार की सामान्य श्रेणियों का समर्थन करती है:

मान टाइप

मान प्रकारों में सीधे उनका डेटा होता है, और मान प्रकारों के उदाहरण या तो कॉल स्टैक पर आवंटित किए जाते हैं या संरचना में पंक्ति के भीतर आवंटित किए जाते हैं। मान प्रकार अंतर्निहित अर्थात रनटाइम द्वारा कार्यान्वित, उपयोगकर्ता परिभाषित, या गणना के रूप मे हो सकते हैं।

संदर्भ टाइप
संदर्भ टाइप, मान के मेमोरी पते के लिए एक संदर्भ संग्रहीत करते हैं, और यह हीप पर आवंटित होते हैं। संदर्भ टाइप स्व-वर्णनात्मक टाइप, पॉइंटर टाइप या इंटरफेस टाइप हो सकते हैं। संदर्भ टाइप का प्रकार स्व-वर्णनात्मक टाइपों के मानों से निर्धारित किया जा सकता है। स्व-वर्णनात्मक टाइप विस्तार से ऐरे और वर्ग टाइप में विभाजित होते हैं। वर्ग टाइप उपयोगकर्ता-निर्मित वर्गों, बॉक्स्ड मान टाइप और डेलीगेट्स को समेकित करते हैं।

विसुअल बेसिक .नेट में लिखा गया निम्न उदाहरण संदर्भ टाइप और मान टाइप के मध्य अंतर को दर्शाता है:

Imports System

Class Class1
    Public Value As Integer = 0
End Class 'Class1
 
Class Test
    Shared Sub Main()
        Dim val1 As Integer = 0
        Dim val2 As Integer = val1
        val2 = 123
        Dim ref1 As New Class1()
        Dim ref2 As Class1 = ref1
        ref2.Value = 123
        Console.WriteLine("Values: {0}, {1}", val1, val2)
        Console.WriteLine("Refs: {0}, {1}", ref1.Value, ref2.Value)
    End Sub 'Main
End Class 'Test

उपरोक्त उदाहरण का आउटपुट

मान: 0, 123
संदर्भ: 123, 123

बॉक्सिंग और अनबॉक्सिंग

बॉक्सिंग

मान प्रकारों को संदर्भ टाइपों में परिवर्तित करना कंप्यूटर विज्ञान में बॉक्सिंग के रूप में भी जाना जाता है। जैसा कि नीचे दिए गए उदाहरण में देखा जा सकता है, कंपाइलर को यह बताना आवश्यक नहीं है कि Int32 को किसी वस्तु के लिए बॉक्स किया गया है, क्योंकि कंपाइलर स्वयं इसका ध्यान रखता है।

Int32 x = 10; 
object o = x ; // Implicit boxing
Console.WriteLine("The Object o = {0}",o); // prints out "The Object o = 10"

यद्यपि, एक Int32 को सदैव निम्नलिखित प्रकार द्वारा स्पष्ट रूप से बॉक्स किया जा सकता है:

Int32 x = 10; 
object o = (object) x; // Explicit boxing
Console.WriteLine("The object o = {0}",o); // prints out "The object o = 10"


अनबॉक्सिंग

निम्न उदाहरण में दिखाया गया है कि कैसे एक रेफरेंस टाइप को वैल्यू टाइप में अनबॉक्स किया जाए। पहले एक Int32 को एक ऑब्जेक्ट में बॉक्स किया जाता है, और फिर उसे फिर से अनबॉक्स किया जाता है। यह ध्यान दें कि अनबॉक्सिंग के लिए निर्दिष्ट कास्ट की आवश्यकता होती है।

Int32 x = 5; 
object o1 = x; // Implicit Boxing
x = (int)o1; // Explicit Unboxing


यह भी देखें

संदर्भ

  1. "मिडपॉइंट राउंडिंग एन्यूमरेशन". Microsoft Docs.


बाहरी संबंध