सीशार्प भाषा के अंतर्गत किसी expression के डाटा टाइप को जानने के लिए अथवा उसे किसी अन्य टाइप में परिवर्तित करने के लिए कई तरह का ऑपरेटर प्रदान किया गया है जिसका ज्ञान किसी भी सीशार्प प्रोग्रामर के लिए अति आवश्यक है क्योंकि प्रोग्रामिंग के अंतर्गत टाइप कंवर्सन एक सामान्य बात है।
आमतौर पर रनटाइम के समय किसी expression की वैल्यू क्या होगी और उसका डाटा टाइप क्या होगा यह जानना प्रोग्रामर के लिए जरूरी होता है और इसके लिए उसे कुछ ऑपरेटर की जरूरत पड़ती है जिसकी सहायता से वह किसी expression की डाटा टाइप हो जान ले और उसके अनुरूप वह संबंधित डाटा टाइप वाले वेरिएबल में उस एक्सप्रेशन की वैल्यू को assign करें। सीशार्प एक type safe भाषा है अतः किसी compatible टाइप में ही किसी टाइप के expression को assign किया जा सकता है। इसके लिए प्रोग्रामर को टाइप कंवर्सन करना भी पड़ सकता है। टाइप कंवर्सन के लिए सी शार्प लैंगुएज में कुछ मेथड और ऑपरेटर उपलब्ध हैं।
सबसे पहले तो यह मन में यह प्रश्न उठा होगा की expression के लिए हम क्यों बात कर रहे हैं। देखिए, एक्सप्रेशन का evaluation मूल्यांकन रनटाइम के समय होता है। अगर हम किसी explicit वैल्यू जैसे "ajeet" को जिसका डाटा टाइप स्ट्रिंग है को किसी दूसरे डाटा टाइप के वेरिएबल में assign करते हैं तो इस प्रकार का असाइनमेंट करने पर कंपाइल टाइम में ही कंपाइलर exception दे देगा। इसके विपरीत, जब किसी एक्सप्रेशन को किसी variable को assign किया जाता है तो उसका evaluation रन टाइम पर होता है। सीशार्प एक type safe भाषा है अतः किसी compatible टाइप में ही किसी टाइप के expression को assign किया जा सकता है। अगर एक्सप्रेशन को किसी उपयुक्त टाइप वाले वेरिएबल में assign नहीं किया जाये है तो runtime में exception उत्पन्न होगा।
यही कारण है कि मैंने लेख के आरम्भ में ही रनटाइम के दौरान evaluate किए जाने वाले expression के संबंध में बात की।
प्रोग्रामिंग में उपयोग की जाने वाले expression को दो भागों में बांटा जा सकता है। कुछ expression ऐसे होते हैं जिन्हें हम न्यूमैरिक expression कह सकते हैं और इसके अतिरिक्त जो एक्सप्रेशन है उन्हें गैर न्यूमैरिक expression कह सकते हैं।
जितने भी न्यूमैरिक एक्सप्रेशन है उनके इवेलुएशन के बाद जो वैल्यू प्राप्त होती है उसका डाटा टाइप किसी न्यूमैरिक टाइप का हो सकता है जैसे byte, int short, long, double, float इत्यादि।
गैर न्यूमैरिक expression का डाटा टाइप bool या string हो सकता है।
सीशार्प भाषा के अंतर्गत किसी एक्सप्रेशन E का मान किसी datatype T प्रकार का हो सकता है। इसकी जांच के लिए is ऑपरेटर का प्रयोग किया जाता है। सामान्य सूत्र यह है कि E is T का मूल्यांकन करने पर इसका मान True या False हो सकता है।
उदाहरण १
public class Base { }
public class Derived : Base { }
public static class IsOperatorExample
{
public static void Main()
{
object b = new Base();
Console.WriteLine(b is Base); // output: True
Console.WriteLine(b is Derived); // output: False
object d = new Derived();
Console.WriteLine(d is Base); // output: True
Console.WriteLine(d is Derived); // output: True
}
}
उदाहरण २
int i = 27;
Console.WriteLine(i is System.IFormattable); // output: True
object iBoxed = i;
Console.WriteLine(iBoxed is int); // output: True
Console.WriteLine(iBoxed is long); // output: False
Declaration and type patterns
You use declaration and type patterns to check if the run-time type of an expression is compatible with a given type. With a declaration pattern, you can also declare a new local variable. When a declaration pattern matches an expression, that variable is assigned a converted expression result, as the following example shows:
उदाहरण ३
object greeting = "Hello, World!";
if (greeting is string message)
{
Console.WriteLine(message.ToLower()); // output: hello, world!
}
The run-time type of an expression result is a nullable value type with the underlying type T.
A boxing or unboxing conversion exists from the run-time type of an expression result to type T.
उदाहरण ४
int? xNullable = 7;
int y = 23;
object yBoxed = y;
if (xNullable is int a && yBoxed is int b)
{
Console.WriteLine(a + b); // output: 30
}
Cast expression
किसी expression को कास्ट करने से अभिप्राय उस expression के डाटा टाइप को किसी दूसरे डाटा टाइप में परिवर्तित करने से है। इसके लिए () ऑपरेटर का प्रयोग किया जाता है और इस () के भीतर उस डाटा टाइप को दिया जाता है जिस डाटा टाइप में एक्सप्रेशन को परिवर्तित करना होता है। संकेत रूप में यदि E एक्सप्रेशन को T datatype में बदलना हो तो (T)E लिखेंगे। ऐसा करने पर सम्भव है कि E का datatype परिवर्तित हो कर T हो जाये परन्तु कोई गारण्टी नहीं है कि कास्टिंग सफल हो। ऐसी स्थिति में exception उत्पन्न होगा।
उदाहरण ५
double x = 1234.7;
int a = (int)x;
Console.WriteLine(a); // output: 1234
IEnumerable numbers = new int[] { 10, 20, 30 };
IList list = (IList)numbers;
Console.WriteLine(list.Count); // output: 3
Console.WriteLine(list[1]); // output: 20
© अजीत कुमार, सर्वाधिकार सुरक्षित।
इस आलेख को उद्धृत करते हुए इस लेख के लिंक का भी विवरण दें। इस आलेख को कॉपीराइट सूचना के साथ यथावत साझा करने की अनुमति है। कृपया इसे ऐसे स्थान पर साझा न करें जहाँ इसे देखने के लिए शुल्क देना पडे।
No comments:
Post a Comment