C# Type Conversion

Introduction to C# Type Conversion

C# एक strongly typed language है। C# में किसी variable में value store करने से पूर्व आप compile time पर ही यह बता देते है की वह variable किस type की value store करेगा। इसके बाद आप उस variable को किसी दूसरे type की value assign नहीं कर सकते है।

उदाहरण के लिए एक integer variable declare करके आप उसे string value नहीं assign कर सकते है। यह programming syntax के विरुद्ध होगा। क्योंकि एक integer type का structure string से अलग होता है। इसे आप force करके change नहीं कर सकते है।

हालाँकि उस value को change किया जा सकता है जो integer variable को assign की जायेगी। उदाहरण के लिए string value को इस प्रकार modify किया जा सकता है की उसे integer variable में store किया जा सके। यह कार्य type conversion द्वारा किया जाता है।

एक programmer के रूप में कई बार आपको किसी एक type के variable को दूसरे type का variable या value assign करना अति आवश्यक हो सकता है। ऐसी situations के लिए C# आपको type conversion की facility provide करती है।

Type conversion एक type की value को दूसरे type की value में convert करने की process होती है। C# में type conversion 4 प्रकार से किया जा सकता है।

  • Implicit Type Conversion
  • Explicit Type Conversion (Casting)
  • User Defined Type Conversions
  • Type Conversion with Helper Classes

इन सभी तरह के type conversions के बारे में आगे detail से बताया जा रहा है।

Implicit Type Conversion

Implicit type conversion compiler द्वारा automatically perform किया जाता है। इस तरह का type conversion built in numeric types के साथ ही संभव है। जब किसी एक type की value दूसरे type में आसानी से बिना value को reduce या cut किये fit हो सके तब ही यह conversion compiler द्वारा perform किया जाता है।

उदाहरण के लिए long type का एक variable int type की कोई सी भी value को store कर सकता है। इसलिए जब आप किसी integer variable को किसी long variable को assign करते है तो compiler automatically integer variable की value को long में convert कर देता है। इसका उदाहरण निचे दिया जा रहा है।

using System;

class myClass
{
     static void Main(string[] args)
    {
         long lNum;
         int iNum = 2474;
         Console.WriteLine(“Value of lNum is : {0}”,iNum);
         lNum = iNum;
         Console.WriteLine(“Value of iNum is : {0}”,lNum);
    }
}

ऊपर दिया गया उदाहरण निचे दिया गया output generate करता है।

Value of lNum is : 2474
Value of iNum is : 2474

Reference types के सन्दर्भ में implicit type conversion तब होता है जब एक derived class के object को उसकी base class या interface को assign किया जाता है। उदाहरण के लिए यदि एक class A है जिसे class B inherit करती है तो B class का कोई भी object A class के किसी भी reference variable (not object) को assign किया जा सकता है।

Reference types के implicit conversion का उदाहरण निचे दिया जा रहा है।

using System;

class myClass
{
    public void display()
    {
          Console.WriteLine(“Hello Reader…”);
    }
}

class myOtherClass:myClass
{

}

class myFinalClass
{
     static void Main(string[] args)
     {
          myOtherClass dObj = new myOtherClass();
          myClass bObj = dObj;
          bObj.display();
     }
}

ऊपर दिया गया उदाहरण निचे दिया गया output generate करता है।

Hello Reader...

Implicit conversion में किसी प्रकार के special syntax की आवश्यकता नहीं होती है क्योंकि conversion type safe manner में compiler द्वारा automatically perform किया जाता है। आप simply उस type के variable को assignment operator द्वारा assign करते है और बाकी processing compiler स्वयं handle कर लेता है।

जैसा की मैने पहले बताया यह conversion केवल तब ही होता है जब convert होने वाली value target type में आसानी से fit हो सके। इसलिए इस तरह के conversion में किसी प्रकार का data loss भी नहीं होता है।

Explicit Type Conversion (Casting)

यदि एक type से दूसरे type में implicit conversion संभव ना हो तो इसके लिए आपको explicit type conversion perform करना होगा। Explicit type conversion को type casting भी कहा जाता है।

Casting के माध्यम से compiler को बताया जाता है की आप एक type की value को दूसरी type में manually convert करना चाहते है। Explicit type conversion perform करने का general syntax निचे दिया जा रहा है।

(target-type) converting-variable or value;

जैसा की आप ऊपर दिए गए syntax में देख सकते है जब आप किसी variable या value को दूसरे type में cast करना चाहते है तो इसके लिए आप उस target type (जिसमे आप convert करना चाहते है ) को convert होने वाले variable या value से पूर्व parenthesis में define करते है। इसे निचे उदाहरण द्वारा समझाया जा रहा है।

using System;

class myClass
{
    static void Main(string[] args)
    {
         double dVar = 1275.343;
         int iVar;
         Console.WriteLine(“Value of dVar is : {0}”,dVar);
         iVar = (int)dVar;
         Console.WriteLine(“Value iVar is : {0} “,iVar);
    }
}

ऊपर दिया गया उदाहरण निचे दिया गया output generate करता है।

Value of dVar is : 1275.343
Value of iVar is : 1275

इसी प्रकार reference types के सन्दर्भ में भी जब आप किसी type को cast करेंगे तो इसके लिए आप target type को parenthesis में define करेंगे। उदाहरण के लिए आप किसी base class के object को derived class में cast करेंगे तो उससे पूर्व derived class के नाम को parenthesis में define करेंगे। इसे निचे उदाहरण द्वारा समझाया जा रहा है।

using System;

class myClass
{
   public void display()
   {
         Console.WriteLine(“Hello Reader…”);
   }
}

class myOtherClass:myClass
{

}

class myFinalClass
{

   static void Main(string[] args)
   {
       myOtherClass dObj = new myOtherClass();
       myClass bObj = dObj;
       myOtherClass dObj2 = (myOtherClass)bObj;
       dObj2.display();
   }
}

ऊपर दिया गया उदाहरण निचे दिया गया output generate करता है।

Hello Reader...

User Defined Type Conversion

C# में user defined type conversion special methods द्वारा perform किया जाता है। यह methods user द्वारा define किये जाते है। इस तरह का type conversion उन classes के बीच implicit और explicit type conversion के लिए होता है जिनके बीच child parent relationship नहीं होती है।

User defined type conversion operator methods द्वारा perform किया जाता है। इन methods को operators की तरह define किया जाता है। इन methods के द्वारा आप classes और structs को दूसरी classes या structs में convert कर सकते है। इन operator methods से user defined types को basic types में भी convert किया जा सकता है।

Conversion operator define करने का general syntax निचे दिया जा रहा है।

public static implicit/explicit operator-keyword targetTypeName(convertingTypeParameter)
{
    //conversion code here…
}

जैसा की आप ऊपर दिए गए syntax में देख सकते है operator methods operator keyword द्वारा define किये जाते है। इन methods को define करते समय सबसे पहले public access modifier define किया जाता है। इसके बाद static keyword define किया जाता है। सभी operator methods का static होना आवश्यक होता है।

Static keyword define करने के बाद implicit या explicit keyword define किया जाता है। जिन operator methods को implicit define किया जाता है वे आवश्यकतनुसार automatically execute हो जाते है। जिन operator methods को explicit define किया जाता है उन्हें execute करने के लिए casting की आवश्यकता होती है।

Conversion operator के प्रयोग को निचे उदाहरण द्वारा समझाया जा रहा है।

using System;

class myClass
{
     public int Num;
     public myClass(int n)
     {
          Num = n;
     }

     public static implicit operator myClass(int i)
     {
           myClass temp = new myClass(i);
           return temp;
     }
}

class myFinalClass
{
   static void Main(string[] args)
   {
       int i = 5;
       myClass obj=i;
       Console.WriteLine(obj.Num);
   }
}

ऊपर दिया गया उदाहरण निचे दिया गया output generate करता है।

5

Type Conversion with Helper Classes

Incompatible types के बीच conversion के लिए C# आपको System.BitConverter, System.Convert या parse methods provide करती है। जिनके माध्यम से आसानी से conversion perform किया जा सकता है।

DateTime objects, hexadecimal strings और byte arrays के बीच conversion के लिए System.BitConverter और System.Convert class का प्रयोग किया जाता है। Parse methods का प्रयोग built in numeric types के लिए किया जाता है।

C# में available कुछ parse methods की list निचे दी जा रही है। इन methods में converting type को argument के रूप में pass किया जाता है।

  • ToBoolean() – Compatible type को boolean में convert करता है।
  • ToByte() – Compatible type को byte में convert करता है।
  • ToChar() – Compatible type को char में convert करता है।
  • ToDateTime() – Integer या string type को DateTime structure में convert करता है।
  • ToDecimal() – Compatible type को decimal में convert करता है।
  • ToDouble() – Compatible type को double में convert करता है।
  • ToInt16() – Compatible type को 16 bit integer में convert करता है।
  • ToInt32() – Compatible type को 32 bit integer में convert करता है।
  • ToInt64() – Compatible type को 64 bit integer में convert करता है।
  • ToSbyte() – Compatible type को signed byte type में convert करता है।
  • ToSingle() – Compatible type को floating number में convert करता है।
  • ToString() – Compatible type को string में convert करता है।
  • ToType() – किसी type को किसी दूसरे type में convert करता है।
  • ToUInt16() – Compatible type को 16 bit unsigned integer में convert करता है।
  • ToUInt32() – Compatible type को 32 bit unsigned integer में convert करता है।
  • ToUInt64() – Compatible type को 64 bit unsigned integer में convert करता है।

इन methods का प्रयोग programmers द्वारा frequently किया जाता है। आपको आवश्यकतानुसार इन्हे ही अपने programs में प्रयोग करना चाहिए।