Type Conversion in C#: विभिन्न प्रकार के C# Shorthand Keywords व .NET Framework Type Classes के बारे में समझने के बाद अब हम Data Type Conversion के विषय में जानेंगे।
चूंकि समय-समय पर हमें हमारे Application में एक प्रकार के Data को किसी दूसरे प्रकार के Data में Convert करके Use करने की जरूरत पडती है, क्योंकि Java की तरह ही C# भी Type Casting के सन्दर्भ में बहुत Strict है और यदि Data को Loss हो रहा हो, तो C# किसी एक Data Type के Data को किसी दूसरे Data Type के Data में Automatically Convert नहीं करता। इसलिए C# में भी Type Casting या Data Type Conversion का काम अक्सर हमें Manually करना पडता है।
C/C++ व Java की तरह ही C# में भी दो प्रकार का Casting या Type Conversion होता है, जिसे Automatic व Manual Type Casting अथवा Implicit व Explicit Type Casting के नाम से जाना जाता है।
Computer में जब भी कोई Expression Execute होता है, तो Compiler कभी भी दो अलग तरह के Data Types के बीच किसी तरह का Operation Perform नहीं करता। बल्कि यदि दो अलग तरह के Data Type के Data के बीच किसी Operation को Perform करना हो, तो Compiler स्वयं अपने स्तर पर Lower Range के Data को Higher Range के Data में Convert करने के बाद उस Expression को Execute करता है और Generate होने वाला Result भी हमेंशा Higher Range का ही होता है।
उदाहरण के लिए यदि हमें 10 और 15.5 को आपस में जोडना हो, तो 10 एक Integer Literal है, जबकि 15.5 एक Floating Point Literal होने की वजह से वास्तव में निम्नानुसार Expression बनता है:
x = 10 + 15.5
int + float
चूंकि Compiler कभी भी दो अलग तरह के Data Types के बीच कोई Operation Perform नहीं करताए इसलिए उपरोक्त Code के Execute होने पर Compiler Lower Data Type यानी int को Higher Data Type यानी float में Convert करता है। यानी Integer Literal 10 को Floating Point Literal 10.0 में Convert करता है। परिणामस्वरूप उपरोक्त Expression कुछ निम्नानुसार बन जाता है:
x = 10.0 + 15.5
float + float
हम देख सकते हैं कि Integer Literal 10 Automatically Convert होकर Floating Point Literal 10.0 बन जाता है। इसी प्रक्रिया को Automatic Type Casting या Implicit Type Casting कहते हैं।
चूंकि अब Expression में Participate करने वाले दोनों ही Literals समान Data Type के हैं, इसलिए इनके बीच Addition हो सकता है। परिणामस्वरूप जब Compiler इन दोनों Literals की Values को आपस में जोडता है, तो दो Floating Point Values के मान आपस में जुडने के कारण Generate होने वाला Result 25.5 भी Floating Point Type का ही होता है।
इसलिए ये मान Variable x में उसी स्थिति में कुछ अपवादों को छोडकर बिना किसी परेशानी के Assign हो सकता है, जबकि x कम से कम float Data Type का हो। जबकि यदि x float Type की Range से छोटी Range का हो, तो 25.5 मान Store करने में सक्षम नहीं होगा। परिणामस्वरूप Data का Loss होने की सम्भावना रहेगी और Data का Loss न हो, इसके लिए C# Compiler इस मान को x में Store न करते हुए एक Error Generate करेगा।
Implicit Type Casting को .NET में “Widening Operation” के नाम से जाना जाता है और इस प्रक्रिया को हम निम्नानुसार Example Program द्वारा बेहतर तरीके से समझ सकते हैं:
// File Name: TypeCasting.cs using System; namespace CSharpFundamentals { class TypeCasting { private static void Main(string[] args) { byte age = 50; short x = age; Console.WriteLine("Value of x is : {0}", x); age = x; Console.WriteLine("Value of age is : {0}", age); } } } // Output: TypeCasting.cs(14,10): error CS0266: Cannot implicitly convert type 'short' to 'byte'. An explicit conversion exists (are you missing a cast?) Value of x is : 50
जैसाकि इस Program के Output में हम देख सकते हैं कि हमारा Program एक Error Display कर रहा है। ये Error इसलिए Display हो रहा है, क्योंकि इस Program में सबसे पहले हमने निम्नानुसार दो Variables Create किए हैं:
byte age = 50;
short x = age;
चूंकि x एक short Type का Variable है, जिसकी Range byte Type के Variable age से ज्यादा होती है, इसलिए x में age की Value Initialize करने पर कोई Error Generate नहीं होताए क्योंकि C# Compiler age में Stored byte Type के मान को short Type के Variable x में Store करने के लिए Implicit Type Casting करते हुए byte Type के मान को short Type के मान में Convert कर देता है।
इसीलिए जब C# Compiler निम्न Statement को Execute करता है:
Console.WriteLine(“Value of x is : {0}”, x);
तो हमें निम्नानुसार x का मान Output में Display होता है:
Value of x is : 50
लेकिन जब C# Compiler निम्न Statement को Execute करता है:
age = x;
तो एक byte Type के Variable age में short Type के Variable x का मान Store करने की कोशिश करता है।
चूंकि short Type की Range byte Type की Range से ज्यादा होती है, इसलिए C# Compiler को लगता है कि यदि byte Type के Variable में short Type की Value को Assign किया जाएगा, तो short Type के Variable का Value Loss हो सकता है। इसलिए C# Compiler Implicit Type Casting को Perform नहीं करता और हमें निम्नानुसार Error Return करता है:
TypeCasting.cs(14,10): error CS0266: Cannot implicitly convert type ‘short’ to ‘byte’. An explicit conversion exists (are you missing a cast?)
Higher Range के Data Type को Lower Range के Data Type में Convert करने की प्रक्रिया को .NET में “Narrowing Operation” के नाम से जाना जाता है।
लेकिन यदि हम Higher Range के Data Type को Lower Range के Data Type में Convert करना ही चाहते हैं, तो हमें Compiler को Manually ये बात बताना होता है कि यदि Higher to Lower Conversion में Data का Loss होता है, तो हमें कोई परेशानी नहीं होगी और इस बात को Specify करने के लिए हमें हमारे Higher Range के Data Type से Just पहले Parenthesis के बीच Lower Data Type को Specify करना होता है।
यानी यदि हम हमारे पिछले Program को ही Normal तरीके से Run करवाना चाहें, तो इसी Program को निम्नानुसार Explicit Type Casting द्वारा Modify किया जा सकता है:
// File Name: ImplicitTypeCasting.cs using System; namespace CSharpFundamentals { class ImplicitTypeCasting { private static void Main(string[] args) { byte age = 50; short x = age; Console.WriteLine("Value of x is : {0}", x); age = (byte)x; Console.WriteLine("Value of age is : {0}", age); } } } // Output: Value of x is : 50 Value of age is : 50
चूंकि हम हमारे short type के Data को byte Type के Data के रूप में Treat करना चाहते हैं, इसीलिए हमने हमारे इस Modified Program में निम्नानुसार Statement का प्रयोग किया है:
age = (byte)x;
जब ये Statement Execute होता है, तो Compiler को पता चल जाता है कि हम Variable x को एक byte Type के Variable की तरह Treat कर रहे हैं और यदि Data का Loss होता है, तो हमें कोई परेशानी नहीं होगी। परिणामस्वरूप ये Program Normal तरीके से Run होता है और हमें उपरोक्तानुसार Output प्राप्त होता है।
System.Convert Class – Type Conversion in C#
System.Convert Class में Define किए गए सारे Methods, Static Methods हैं। इसलिए इन्हें Use करने के लिए हमें हमेंशा Prefix के रूप में Convert Class का नाम Use करना जरूरी होता है।
इस Class में सभी तरह के Data Type Conversion Methods को Define किया गया है, जिनके बारे में Detailed जानकारी प्राप्त करने के लिए हम Visual Studio के Object Browser Option को Use कर सकते हैं। फिर भी कुछ Conversion Methods के नाम निम्नानुसार हैं, जो कि Self Descriptive हैं:
- ToBase64CharArray()
- ToBase64String()
- ToBoolean()
- ToByte()
- ToChar()
- ToDateTime()
- ToDecimal()
- ToDouble()
- ToInt16()
- ToInt32()
- ToInt64()
- ToSByte()
- ToSingle()
- ToString()
- ToUInt16()
- ToUInt32()
- ToUInt64()
इन सभी Methods में Argument के रूप में हम चाहे किसी भी तरह का मान Specify करें, ये Methods हमें Appropriate Converted Data Type का मान Return करते हैं। साथ ही इस Class में इन Methods के अलावा ChangeType() नाम के एक और Methods को Specify किया गया है, जिसका प्रयोग करके हम किसी एक Object Type को किसी दूसरे System Type में Convert कर सकते हैं।
जब हम Conversion Methods को Use करते हैं, तब इस बात का ध्यान रखना होता है कि Conversion Methods को हमेंशा Appropriate Argument के साथ ही Use करना चाहिए। उदाहरण के लिए हम किसी Floating Point Value को कभी भी DateTime Type में Convert नहीं कर सकते। इसी तरह से हम किसी Company के नाम को Long Type में Convert नहीं कर सकते। यानी जो Conversion कभी सम्भव ही न हो, इस Class में Defined किसी भी Method का प्रयोग करके वैसा Conversion नहीं कर सकते।
ये Article इस वेबसाईट पर Selling हेतु उपलब्ध EBook C#.NET in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी।
C#.NET in Hindi | Page:908 | Format: PDF