Thursday, June 2, 2016

अध्याय १- C# के फीचर्स एवं .NET फ्रेमवर्क

C# एक सिम्पल, टाइप सेफ, स्ट्रोंगली टाइप्ड (Strongly Typed ), सामान्य उपयोग (General purpose) एवं ऑब्जेक्ट ओरिएंटेड़ प्रोग्रामिंग language है। यह भाषा कॉमन टाइप सिस्टम (CTS), जो कॉमन लैंगवेज रनटाइम (CLR) का अंग है, को ध्यान मे रख कर बनाई गयी है।

यहाँ टाइप सेफ का अर्थ यह है कि CLR यह सुनिश्चित करता है कि कोड का एक हिस्सा (जैसे कोई ऑब्जेक्ट) किसी अन्य हिस्से के अंतर्गत आने वाले मेमोरी एरिया मे हस्तक्षेप नहीं कर सकता। यही कारण है कि CLR द्वारा नियंत्रित कोड को मैनेज्ड कोड (Managed Code) कहा जाता है। C# मे अनमेनेज्ड कोड भी लिखा जा सकता है जो C-Style pointers से संभव होता है।

C# को सामान्य उपयोग की भाषा इसलिए कहा जाता है क्योंकि एक ही भाषा का प्रयोग करके विभिन्न प्रकार के सॉफ्टवेर बनाए जा सकते हैं।
१. डिवाइस के अनुसार (PC, Mobile  आदि)
२. प्लैटफ़ार्म के अनुसार (x86, x64, ARM)
३. ऑपरेटिंग सिस्टम के अनुसार (विंडोज, लिनक्स (Mono Framework), एण्ड्रोइड (Xamarin Framework))
४. यूजर इंटरफ़ेस के अनुसार (कमांड लाइन (CLI), GUI (विंडोज फॉर्म्स, WPF), वेब बेस्ड (ASP.NET      वेब फॉर्म्स, ASP.NET Web API, ASP.NET MVC ))

C# एक अन्य फीचर भी है जिसे स्टैटिक टायपिंग भी कहते हैं। इसका अर्थ यह है कि किसी भी प्रोग्राम मे उपयोग किए गए variables को compile करने के समय उनके सही प्रकार (data type) के लिए जाँचा जाता है। उदाहरणतः यदि किसी int प्रकार के variable पर कोई ऐसा ऑपरेशन किया जा रहा है जो उसके हिसाब से सही नहीं है जैसे

int a=10;
Console.WriteLine("Sum of the two variables is:{0}", (a+"hello"));

तो compiler कोड को compile नहीं करेगा एवं error दिखाएगा। यहाँ a  (int variable) एवं "hello" (string constant) को जोड़ने का प्रयास किया जा रहा है जो गलत है।
C# में डाइनैमिक टायपिंग भी की जा सकती  है। स्टैटिक टायपिंग फीचर के लिए var keyword को C# 3.0 मे सम्मिलित किया गया था। यदि हम variable का टाइप स्पष्ट नहीं करना चाहते हैं तो हम var (data टाइप के स्थान पर) प्रयोग कर सकते हैं। जैसे

int64 a=10;

के स्थान पर,

var a=10;

इसे हम short hand notation मान सकते हैं। यदि इस variable a पर integer operations के अतिरिक्त कोई अन्य ऑपरेशन किया जाता है तो compiler कोड को compile नहीं करेगा। अर्थात स्टैटिक टायपिंग में variable का प्रकार compilation के समय ही सुनिश्चित हो जाता है।

वहीं डाइनैमिक टायपिंग में, जिसके लिए dynamic टाइप C# 4.0 में सम्मिलित किया गया, variable का टाइप रन टाइम पर सुनिश्चित किया जाता है। डाइनैमिक टायपिंग के लिए DLR (Dynamic Language Runtime) API (Application Programming Interface) को सम्मिलित किया गया जो यह सुविधा उपलब्ध करता है।
IronPython एवं IronRuby आदि Dynamically Typed भाषाएँ हैं जो .NET फ्रेमवर्क समर्थित हैं।
उदाहरण:

var a=10;                          // a का टाइप int है यह compilation के पूर्व compiler को ज्ञात है।
dynamic a; // a का टाइप int है यह रन टाइम पर ही  ज्ञात  होता है।
a=10;

C# स्ट्रोंगली टाइप्ड (Strongly Typed ) भाषा  भी है
कॉमन टाइप सिस्टम (CTS) विभिन्न  भाषाओं को जोड़ने का माध्यम है। अर्थात जो भाषा कॉमन टाइप सिस्टम (CTS) को स्वीकार करती है, उसके सोर्स कोड को एक विशेष कंपायलर (C# कंपायलर (csc.exe) यदि वह भाषा C# है तो) द्वारा MSIL (Microsoft Intermediate Language) मे परिवर्तित कर दिया जाता है। यह MSIL जिस फ़ाइल मे save किया जाता है उसे एसेम्बली कहा जाता है। यह एसेम्बली .EXE या .DLL फ़ाइल हो सकती है। इस एसेम्बली को JIT (Just in time compiler) execute करता है जिससे native code बनता है जो प्रत्येक कम्प्युटर के लिए विशिष्ट होता है। यह native code, CLR द्वारा नियंत्रित मेमोरी (Computer RAM का एक हिस्सा) जिसे हीप (heap) कहा जाता है, में रखा जाता है। यहाँ से यह ऑपरेटिंग सिस्टम द्वारा execute किया जाता है।


सी शार्प (C#) प्रोग्रामिंग

सभी को नमस्कार !
इस ब्लॉग में, मैं आपको विभिन्न Computer Languages सिखाने का प्रयत्न करूँगा, वो भी हिन्दी में। हिन्दी इसलिए क्योंकि Globalization के इस दौर मे कोई यदि ज्ञान सिर्फ इसलिए अर्जित नहीं कर पा रहा है क्योंकि उसे अँग्रेजी नहीं आती तो यह बहुत दुख की बात है। इसलिए मैंने यह निर्णय लिया कि हिन्दी मे यह जानकारी जन सामान्य तक पहुंचनी चाहिए। इस ब्लॉग का अंग्रेज़ी अनुवाद भी यहाँ  Learn to program उपलब्ध है।

सबसे पहले मैं माइक्रोसॉफ़्ट  C#.NET कि चर्चा करूंगा । नीचे विषय सूची दी गयी है जिसके अनुसार मैं पाठ्य सामाग्री upload करूँगा।

अध्याय १- C# के फीचर्स एवं  .NET फ्रेमवर्क
अध्याय २ - प्रोग्रामिंग के लिए आवश्यक सॉफ्टवेर
अध्याय ३- बेसिक C# (जैसे syntax, variables, data types, operators आदि)
अध्याय ४- एडवांस्ड C# (जैसे Exception हैंडलिंग, डेलीगेटेस, इवेंट्स, anonymous मेथड्स आदि)
अध्याय ५- ऑब्जेक्ट ओरिएंटेड़ C#
अध्याय ६- स्ट्रिंग्स (Strings)
अध्याय ७- जेनेरिक्स (Generics)
अध्याय ८- कलेक्शंस (Collections)
अध्याय ९- लिंक (LINQ)
अध्याय १०- मल्टी थ्रेडिंग एवं नेटवर्किंग
अध्याय ११- फ़ाइल हैंडलिंग