पूर्णता के लिए, यहां संबंधित जानकारी का एक मस्तिष्क डंप है ...
जैसा कि दूसरों ने उल्लेख किया है, के stringलिए एक उपनाम है System.String। वे एक ही कोड के लिए संकलित करते हैं, इसलिए निष्पादन के समय में कोई अंतर नहीं है। यह सी # में उपनामों में से एक है। पूरी सूची है:
object: System.Object
string: System.String
bool: System.Boolean
byte: System.Byte
sbyte: System.SByte
short: System.Int16
ushort: System.UInt16
int: System.Int32
uint: System.UInt32
long: System.Int64
ulong: System.UInt64
float: System.Single
double: System.Double
decimal: System.Decimal
char: System.Char
इसके अलावा stringऔर object, उपनाम सभी प्रकार के मूल्य हैं। decimalएक मान प्रकार है, लेकिन सीएलआर में एक आदिम प्रकार नहीं है। केवल एक आदिम प्रकार है जिसमें एक उपनाम नहीं है System.IntPtr।
कल्पना में, मूल्य प्रकार के उपनाम को "सरल प्रकार" के रूप में जाना जाता है। प्रत्येक सरल प्रकार के निरंतर मूल्यों के लिए साहित्य का उपयोग किया जा सकता है; कोई अन्य मूल्य प्रकार के शाब्दिक रूप उपलब्ध नहीं हैं। (वीबी के साथ इसकी तुलना करें, जो DateTimeशाब्दिक रूप से अनुमति देता है, और इसके लिए एक उपनाम भी है।)
एक परिस्थिति है जिसमें आपको उपनामों का उपयोग करना पड़ता है: जब किसी एनम के अंतर्निहित प्रकार को स्पष्ट रूप से निर्दिष्ट करना। उदाहरण के लिए:
public enum Foo : UInt32 {} // Invalid
public enum Bar : uint {} // Valid
इस तरह का मामला कल्पना परिभाषित करता है enum घोषणाओं है - कोलन के बाद भाग हो गया है अभिन्न प्रकार उत्पादन, जिनमें से एक टोकन है sbyte, byte, short, ushort, int, uint, long, ulong, char... के विपरीत प्रकार के रूप में उत्पादन उदाहरण के लिए चर घोषणाओं द्वारा उपयोग किया जाता है। यह किसी अन्य अंतर को इंगित नहीं करता है।
अंत में, जब इसका उपयोग करने की बात आती है: व्यक्तिगत रूप से मैं कार्यान्वयन के लिए हर जगह उपनाम का उपयोग करता हूं, लेकिन किसी भी एपीआई के लिए सीएलआर प्रकार। यह वास्तव में बहुत ज्यादा मायने नहीं रखता है जिसे आप कार्यान्वयन के संदर्भ में उपयोग करते हैं - आपकी टीम के बीच निरंतरता अच्छी है, लेकिन कोई और देखभाल करने वाला नहीं है। दूसरी ओर, यह वास्तव में महत्वपूर्ण है कि यदि आप किसी एपीआई में एक प्रकार का उल्लेख करते हैं, तो आप ऐसा भाषा-तटस्थ तरीके से करते हैं। एक विधि जिसे ReadInt32असंदिग्ध कहा जाता है, जबकि एक विधि ReadIntको व्याख्या की आवश्यकता होती है। कॉल करने वाला एक भाषा का उपयोग कर सकता है , जो उदाहरण के intलिए एक उपनाम को परिभाषित करता है Int16। .NET फ़्रेमवर्क डिजाइनरों इस पैटर्न का पालन किया है, अच्छे उदाहरण में किया जा रहा BitConverter, BinaryReaderऔर Convertवर्गों।
stringका एक शाब्दिक निर्माण है जबकि सिर्फ एक प्रकार है। किसी भी अनुमान में स्पष्ट अंतर के बावजूद , अभी भी यह अंतर्निहित अंतर है जिसे कुछ अस्पष्टता के साथ जोड़ा जा सकता है। भाषा को इस तरह से समर्थन करना चाहिए कि कार्यान्वयन BCL में किसी विशेष वर्ग के लिए विचार करने के लिए इतना (काफी) बाध्य नहीं है।System.Stringstring