C# Primitive Types: C# एक Pure Object Oriented Programming Language है, इसलिए C# में हम जिन Primary Data Types को Use करते हैं, उन्हें भी .NET Framework में System नाम के Namespace में Classes की तरह Define किया गया है और C# में जिन Keywords का प्रयोग करके हम किसी Primary Data Type को Create करते हैं, वास्तव में हम उन सभी Primary Data Types को System Namespace की Primary Data Type Classes के Object के रूप में भी Create कर सकते हैं।
क्योंकि Primary Data Types Create करने के लिए हम C# में जिन Keywords का प्रयोग करते हैं, वे सभी Keywords वास्तव में System Name Space की Primary Data Type Classes के Shorthand Notation मात्र ही हैं।
.NET Framework में Language Interoperability बना, रखने के लिए विभिन्न CLS-Compliant Data Types को Define किया गया है। जबकि C# में ऐसे .NET में ऐसे Primary Data Type Classes को भी Define किया गया है, जो CLS-Compliant नहीं है।
इसलिए यदि हम ऐसे Data Type को अपने Program में Use करते हैं, जो कि CLS-Compliant नहीं हैं, तो हम इस प्रकार के Codes को Language Interoperability की सुविधा प्राप्त करते हुए अन्य Programming Language में Use नहीं कर सकते।
विभिन्न C# Shorthand Keywords व उनसे Associated System Namespace में Specified Primary Data Type Classes व उनकी CLS-Compliant के विषय में जरूरी जानकारियों को हम निम्न सारणी द्वारा प्राप्त कर सकते हैं:
C# Shorthand | CLS-Compliant? | System Type |
bool | Yes | System.Boolean |
sbyte | No | System.SByte |
byte | Yes | System.Byte |
short | Yes | System.Int16 |
ushort | No | System.UInt16 |
int | Yes | System.Int32 |
uint | No | System.UInt32 |
long | Yes | System.Int64 |
ulong | No | System.UInt64 |
char | Yes | System.Char |
float | Yes | System.Single |
double | Yes | System.Double |
decimal | Yes | System.Decimal |
string | Yes | System.String |
Object | Yes | System.Object |
जैसाकि हम उपरोक्त सारणी द्वारा समझ सकते हैं कि sbyte, ushort, uint, ulong ऐसे Data Type हैं, जो CLS-Compliant नहीं हैं। इसलिए यदि हम हमारे किसी Code में इन Data Type को Use करें, तो उस Code को Language Interoperability सुविधा प्राप्त करते हुए अन्य .NET Supported Programming Languages के साथ Use नहीं किया जा सकता। जबकि यदि हम चाहें, तो C# Shorthand Keywords Use करने के स्थान पर हम Directly .NET System Type को भी Use कर सकते हैं। जैसे:
string name = “Kuldeep Mishra”;
इस Statement को हम निम्नानुसार तरीके से भी लिख सकते हैं:
System.String name = “Kuldeep Mishra”;
new Operator
चूंकि जैसाकि हमने पिछले Section में बताया कि C# एक Pure Object Oriented Language होने की वजह से उसमें कोई भी Primary Data Type नहीं होताए बल्कि सारे Primary Data Types Keywords वास्तव में System Namespace में Specified Classes के Shorthand होते हैं।
इसलिए हम किसी भी अन्य Class के Object की तरह ही System Namespace के विभिन्न Primary Data Type की Classes के Object Create करके भी Primary Data Types को Handle कर सकते हैं और किसी भी अन्य Object Oriented Programming Language की तरह ही C# में भी किसी Class का नया Object Create करने के लिए हमें new Operator को Use करना होता है।
इसलिए यदि हम चाहें तो किसी भी Class के Constructor का प्रयोग करते हुए भी हम नए Primary Data Type के Objects Create कर सकते हैं। जैसे:
System.String name = “Kuldeep Mishra”;
new Keyword का प्रयोग करते हुए हम इसी Statement को निम्नानुसार भी Specify कर सकते हैं:
System.String name = new System.String(“Kuldeep Mishra”);
और क्योंकि C# के सारे Primary Data Type Keywords वास्तव में System Namespace में Specified Primary Data Type की Classes के Shorthand ही हैं, इसलिए हम किसी भी C# Primary Data Type Keyword के साथ भी new Operator का प्रयोग कर सकते हैं:
string name = “Kuldeep Mishra”;
और new Operator का प्रयोग करते हुए इस Statement को हम निम्नानुसार तरीके से भी लिख सकते हैं:
string name = new string(“Kuldeep Mishra”);
जब हम new Operators का प्रयोग करते हुए Constructors के माध्यम से Primary Data Type के Objects Create करते हैं, तो Create होने वाले Primary Type के सभी Variables Automatically अपनी Default Values से Initialize हो जाते हैं। यानी-
- bool Variable false से Initialize हो जाता है।
- सभी Integer Variable 0 से Initialize हो जाते हैं।
- सभी Floating Point Variables 0 से Initialize हो जाते हैं।
- सभी DateTime Variables “1/1/001 12:00:00 AM” से Initialize हो जाते हैं।
- सभी Object References null से Initialize हो जाते हैं।
C# Primitive Types and Associated .NET Classes
Primary Data Type होने के बावजूद C# में हम सभी Data Types को Class Hierarchy के रूप में Represent कर सकते हैं क्योंकि C# में Primary Data Types भी वास्तव में Classes ही होते हैं।
जैसाकि हम अगले चित्र द्वारा समझ सकते हैं कि C# में हर Type को System.Object Class से ही Derive किया गया है और System.Object वास्तव में C# की Top या मुख्य Class होती है।
इसलिए इस Top Class में जिन Methods (ToString(), Equals(), GetHashCode(), GetType(), MemeberwiseClone(), ReferenceEquals()) को Define किया है, वे सभी Methods .NET Framework की हर Derived Class में Available रहते हैं।
साथ ही C# में सभी Numerical Data Types को System.ValueType नाम की Class से Derive किया गया है। इसलिए जो भी Classes इस System.ValueType Class की Descendents होती हैं, उन सभी Classes के Objects Automatically Stack में Memory Allocate करते हैं।
जबकि जो Classes System.ValueType Class से Derived नहीं हैं, (System.Type, System.String, System.Array, System.Exception व System.Delegate) उन सभी Classes के Objects Stack में नहीं बल्कि Memory के Garbage-Collected Heap Area में Create होते हैं।
चूंकि C# में सभी Primary Data Type वास्तव में System.ValueType Class की Derived Class होती हैं, इसलिए किसी भी Primary Data के साथ भी हम System.Object Class के ToString(), Equals(), GetHashCode(),, ReferenceEquals(), MemeberwiseClone(), GetType() Methods को Use कर सकते हैं, क्योंकि C# सभी Primary Data को Object की तरह ही Treat करता है। यानी हम इन Methods को किसी भी Primary Data (Integer, Character, Float, Boolean) के साथ निम्न C# Program की तरह Use कर सकते हैं:
// File Name: ObjectMethodsWithPrimaryDataType.cs using System; namespace CSharpFundamentals { class ObjectMethodsWithPrimaryDataType { private static void Main(string[] args) { Console.WriteLine("Using Methods of System.Object Top Level Class with Primary Data"); /* A C# int is really a shorthand for System.Int32 which inherits the following members from System.Object. */ Console.WriteLine("100.GetHashCode() = {0}", 100.GetHashCode()); Console.WriteLine("100.Equals(23) = {0}", 100.Equals(200)); Console.WriteLine("100.ToString() = {0}", 100.ToString()); Console.WriteLine(); Console.WriteLine("100.GetType() = {0}", 100.GetType()); Console.WriteLine("true.GetType() = {0}", true.GetType()); Console.WriteLine("100.10.GetType() = {0}", 100.10D.GetType()); Console.WriteLine("\"100\".GetType() = {0}", "100".GetType()); } } } // Output: Using Methods of System.Object Top Level Class with Primary Data 100.GetHashCode() = 100 100.Equals(23) = False 100.ToString() = 100 100.GetType() = System.Int32 true.GetType() = System.Boolean 100.10.GetType() = System.Double "100".GetType() = System.String
जैसाकि पिछले Program में हमने एक Value “100” के साथ System.Object Class में Defined विभिन्न Methods को Use किया है, ऐसा इसीलिए सम्भव है, क्योंकि C# किसी भी Value को Primary Data की तरह नहीं बल्कि Object की तरह ही Treat करता है।
हालांकि System.Object Class में Defined विभिन्न Methods के बारे में Detail से हम आगे समझेंगे। लेकिन फिर भी Equals() Method में Argument के रूप में Specified Value को ये Method अपने Object की Value से Compare करता है और यदि Values समान हों, तो true जबकि Value समान न होने की स्थिति में false Return करता है।
हमारे उदाहरण में हमने Value 100 के साथ Equals() Method को Call किया है और Argument के रूप में मान 200 Specify किया है। चूंकि 100 व 200 एक समान नहीं होते, इसलिए ये Method False Return करता है।
इसी तरह से ToString() Method को जिस किसी भी Value के साथ Use किया जाता है, यदि सम्भव हो, तो ये Method उस Value को String में Convert करके फिर से Return कर देता है।
जबकि GetType() Method का प्रयोग हम जिस प्रकार की Value के साथ करते हैं, ये Method उस Value का .NET Framework Based Type Name Return कर देता है।
इसीलिए उपरोक्त Example Program में जब हम Integer Value 100 के साथ इस Method को Call करते हैं, तो हमे Output के रूप में .NET Framework की Integer Primary Data Type की Class System.Int32 प्राप्त होता है। जबकि true Value के साथ इसी Method को Call करने पर हमें System.Boolean Class Name प्राप्त होता है। (C# Primitive Types)
ये Article इस वेबसाईट पर Selling हेतु उपलब्ध EBook C#.NET in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी।
C#.NET in Hindi | Page:908 | Format: PDF