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

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

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

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

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

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

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

मान टाइप

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

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

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

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

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

यह भी देखें

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

बाहरी संबंध

 * माइक्रोसॉफ्ट developer's guide describing the सीटीएस
 * Built-in types in the .नेट Framework