aria80
26 May 2007, 02:43 AM
آشنائی با زبان C#
مايكروسافت در مصاف با جاوا، بدنبال ارائه يك زبانكامل بود كه سايه جاوا را در ميادين برنامه نويسی كم رنگ تر نمايد. شايد بهمين دليلباشد كه #C را ايجاد كرد. شباهت های بين دو زبان بسيار چشمگير است. مايكروسافت دررابطه با ميزان استفاده و گسترش زبان فوق بسيار خوشبين بوده و اميدوار است بسرعتزبان فوق گستردگی و مقبوليتی به مراتب بيشتر از جاوا را نزد پياده كنندگان نرمافزار پيدا كند.
با توجه به نقش محوری اين زبان، از آن بعنوان مادر زبانهایبرنامه نويسی در دات نت نام برده می شود. مورد فوق به تنهائی، می تواند دليل قانعكننده ای برای يادگيری اين زبان باشد، ولی دلايل متعدد ديگری نيز وجود دارد كه درادامه به برخی از آنها اشاره می گردد.
مطرح شدن بعنوان يك استانداردصنعتی
انجمن توليدكنندگان كامپيوتر اروپا (ECMA) زبان #C را در سوم اكتبر سال 2001 بعنوان يك استاندارد پذيرفته (ECMA-334) و بدنبال آن تلاش های وسيعی برای كسبگواهی ISO نيز انجام شده است. زبان فوق در ابتدا توسط شركت مايكروسافت و بعنوانبخشی از دات نت پياده سازی و بلافاصله پس از آن توسط شركت های اينتل، هيوليت پاكاردو مايكروسافت مشتركا، جهت استاندارسازی پيشنهاد گرديد.
زبان #C بگونه ایطراحی شده است كه نه تنها وابستگی به يك Platform خاص را ندارد، بلكه در اغلب مواردوابستگی RunTime نيز ندارد. كامپايلر #C می تواند بر روی هر نوع معماری سخت افزاریطراحی و اجرا گردد. در برخی از نسخه های اوليه كامپايلر زبان فوق كه توسط برخی ازشركت های جانبی ارائه شده است، كدهای #C را به بايت كدهای جاوا كمپايل می كنند. يكیاز چنين كامپايلرهائی را می توان در سايت Halcyonsoft.com مشاهده نمود. بنابراينكدهای #C براحتی قابليت حمل بر روی محيط های متفاوت را دارا خواهندبود. مشخصات تعريف شده زبان #C با ساير استاندارهای تعريف شده ECMA نظير (ECMA-335) CLI (Common Language Infrastructure) بخوبی مطابقت می نمايند. CLI قلبو روح دات نت و CLR(Common Language Runtime) است. اولين نسخه از كامپايلر زبان #C كه از CLI استفاده می كند، NET Framwork. مايكروسافت است. با توجه به مواردگفته شده، مشخص می گردد كه اين زبان بسرعت بسمت استاندارد شدن حركت و با تاييداستانداردهای مربوطه از طرف انجمن های معتبر بين المللی و حمايت فراگير شركت هایمعتبر كامپيوتری در دنيا مسير خود را بسمت جهانی شدن بخوبی طی می نمايد.
#C چيست ؟
طراحان زبان #C با تاكيد و الگوبرداری مناسب از مزايای زبانهائی نظير ++C، C و جاوا و ناديده گرفتن برخی از امكانات تامل برانگيز و كم استفاده شده در هريك از زبانهای فوق، يك زبان برنامه نويسی مدرن شی گراء را طراحی كرده اند. درمواردی، برخی از ويژگی های استفاده نشده و درست درك نشده در هر يك از زبانهای گفتهشده، حذف و يا با اعمال كنترل های لازم بر روی آنها، زمينه ايجاد يك زبان آسان وايمن برای اغلب پياده كنندگان نرم افزار بوجود آمده است. مثلا C و ++C می توانندمستقيما با استفاده از اشاره گرها عمليات دلخواه خود را در حافظه انجام دهند. وجودتوانائی فوق برای نوشتن برنامه های كامپيوتری با كارائی بالا ضرورت اساسی دارد. امادر صورتيكه عملياتی اينچنين بدرستی كنترل و هدايت نگردند، خود می تواند باعث بروزمسائل (Bugs) بيشماری گردد.
طراحان زبان #C، با درك اهميت موضوع فوق، اينويژگی را كماكان در آن گنجانده ولی بمنظور ممانعت از استفاده نادرست و ايجاداطمينان های لازم مسئله حفاظت نيز مورد توجه قرار گرفته است. جهت استفاده از ويژگیفوق، برنامه نويسان می بايست با صراحت و به روشنی خواسته خود را از طريق استفاده از Keyword های مربوطه اعلان نمايند( فراخوانی يك توانائی و استفاده از آن .( #C بعنوان يك زبان شی گراء عالی است. اين زبان First-Class را برای مفهوم Property (Data Member) بهمراه ساير خصائص عمومی برنامه نويسی شی گراء حمايت می كند. در C و ++C و جاوا يك متد get/set اغلب برای دستيابی به ويژگی های هر Property استفاده میگردد. CLI همچنان تعريف Property را به متدهای get/ser ترجمه كرده تا بدين طريقبتواند دارای حداكثر ارتباط متقابل با ساير زبانهای برنامه نويسی باشد. #C بصورتفطری Events ، Declared Value، Reference Type ، Operator Overloading را نيز حمايتمی كند .
كد مديريت يافته
با استفاده از نسخه پياده سازی شده #C توسطمايكروسافت، می توان همواره كد مديريت يافته ای را توليد كرد. يك برنامه #C پس ازكامپايل، بصورت برنامه ای در خواهد آمد كه شامل دستورالعمل های تلفيق شده CIL :
(Common Intermediate Language) است ( درست بر خلاف دستورالعمل های مختص يك ماشينخاص). CIL (گاها با نام MSIL (Microsoft Intermediate Language) با به اختصار IL نيزناميده می شود ) ، در مفهوم مشابه بايت كدهای جاوا بوده و شامل مجموعه ای ازدستورالعمل های سطح پايين قابل فهم توسط تكنولوژی مبتنی بر CLI نظير CLR مايكروسافتخواهد بود. اين برنامه ها بدين دليل كد مديريت يافته، ناميده می شوند كه CLR مسئوليت تبديل اين دستورالعمل ها به كدهای قابل اجرا برروی ماشين و ارائه اغلبسرويس های اساسی برای كدينگ نظير : Garbage Collection، مديريت Heap و عمر مفيد يك Object و يا Type Verification را فراهم می كند.
روش يادگيری #C
يادگيریاين زبان برای افراديكه دارای سابقه آشنائی با يكی از زبانهای برنامه نويسی
++C، C و يا جاوا باشند كار مشكلی نخواهد بود، حتی افراديكه دارای آشنائی اوليه باجاوااسكريپت و يا ديگر زبانهای برنامه نويسی نظير ويژوال بيسك می باشند، امكان پذيرو راحت خواهد بود. برخی از برنامه نويسان حرفه ای بر اين باور هستند كه #C نسبت به VB.NET با اقبال بيشتر و سريعتری مواجه خواهد شد، چراكه #C نسبت به ويژوال بيسكخلاصه تر است. حتی برنامه های بزرگ و پيچيده ای كه توسط #C نوشته می گردند خواناتر،كوتاه و زيبا خواهند بود. برخی از ويژگی های ارائه شده در #C نظير Unsigned Integer، Operator OverLoading و امنيت بيشتر Type ها، در VB.NET وجود نداشته و اينامر می تواند دليلی بر فراگيرتر شدن #C نسبت به VB.NET نزد برنامه نويسان با تجربهباشد.
برای يادگيری هر يك از زبانهای حمايت شده در دات نت، می بايست از
BCL (Basic Class Library) مربوط به NET Framework. شروع كرد . #C خود صرفا دارای ۷۷کلمه کليدی يا Keyword بوده كه برای اكثر برنامه نويسان غريب نخواهند بود. در مقابل BCL، دارای ۴۵۰۰ كلاس و تعداد بيشماری متد و Property است كه برنامه نويسان #C، میتوانند از آنها برای انجام عمليات دلخواه خود استفاده نمايند. شايد يكی از مسائلقابل توجه جهت يادگيری اين زبان برای برخی از برنامه نويسان حرفه ای عدم وجود برخیاز ويژگی ها و امكاناتی باشد كه در گذشته و از طريق ساير زبانهای استفاده شده،بخدمت گرفته می شدند. مثلا عدم وجود امكاناتی جهت توارث چندگانه (MI) سلسله مراتبیيك شئ .
خلاصه
بدون شك فراگيری و تسلط بر زبان #C بمنزله كسب يك پتانسيلبا ارزش بوده كه ثمرات آن برای برنامه نويسان در حال و آينده ای نه چندان دور بيشترهويدا خواهد شد. استاندارد بودن و وجود كتابخانه ای مملو از كلاس اين اطمينان رابوجود خواهد آورد كه با فراگيری زبان فوق و كسب، مهارت های لازم، به يك توانائی فرامحيطی جديد دست پيدا خواهيم كرد كه امكان استفاده از آن بر روی محيط های متفاوتوجود خواهد داشت. ويژگی ها و قابليت های بيشمار اين زبان از جمله دلايل قانع كنندهديگری است كه فراگيری آن را توجيه پذير و منطقی می كند.
طي سلسله مقالاتي مي خواهيم با C# بيشتر آشنا شويم. فرض اين مقالات بر اين است كهآشنايي مختصري با زبانهاي برنامه نويسي داريد ، هر چند كار ما تقريبا از صفر شروعمي شود و هدف آن سادگي هر چه بيشتر است.
C# از دو زبان C++ و Java متولدشده است! حاوي بسياري از جنبه هاي C++ مي باشد اما ويژگي هاي شيء گرايي خودش را ازجاوا به ارث برده است.
C# اگرچه از C++ گرفته شده است اما يك زبان "خالص" شيء گرا
(Object Oriented) مي باشد. هر دو زبان ياد شده جزو زبانهاي هيبريد محسوبمي شوند اما طراحان C# اين مورد را به اندازه ي C++ مهم تلقي نكرده اند. يك زبانهيبريد اجازه ي برنامه نويسي با شيوه هاي مختلف را ميسر مي كند. دليل اينكه C++ هيبريد است ، اين است كه قرار بوده تا با زبان C سازگار باشد و همين امر سبب گرديدهتا بعضي از جنبه هاي C++ بسيار پيچيده شوند.
زبان سي شارپ فرض اش بر ايناست كه شما مي خواهيد تنها برنامه نويسي شيء گرا انجام دهيد و همانند C++ مخلوطي ازبرنامه نويسي رويه ايي (Procedural) و شيء گرا را نمي خواهيد به پايان برسانيد. بنابراين بايد طرز فكر خودتان را با دنياي شيء گرايي تطبيق دهيد. در ادامه خواهيدديد كه در سي شارپ هر چيزي شيء است حتي يك برنامه ي سي شارپ.
مايكروسافت در مصاف با جاوا، بدنبال ارائه يك زبانكامل بود كه سايه جاوا را در ميادين برنامه نويسی كم رنگ تر نمايد. شايد بهمين دليلباشد كه #C را ايجاد كرد. شباهت های بين دو زبان بسيار چشمگير است. مايكروسافت دررابطه با ميزان استفاده و گسترش زبان فوق بسيار خوشبين بوده و اميدوار است بسرعتزبان فوق گستردگی و مقبوليتی به مراتب بيشتر از جاوا را نزد پياده كنندگان نرمافزار پيدا كند.
با توجه به نقش محوری اين زبان، از آن بعنوان مادر زبانهایبرنامه نويسی در دات نت نام برده می شود. مورد فوق به تنهائی، می تواند دليل قانعكننده ای برای يادگيری اين زبان باشد، ولی دلايل متعدد ديگری نيز وجود دارد كه درادامه به برخی از آنها اشاره می گردد.
مطرح شدن بعنوان يك استانداردصنعتی
انجمن توليدكنندگان كامپيوتر اروپا (ECMA) زبان #C را در سوم اكتبر سال 2001 بعنوان يك استاندارد پذيرفته (ECMA-334) و بدنبال آن تلاش های وسيعی برای كسبگواهی ISO نيز انجام شده است. زبان فوق در ابتدا توسط شركت مايكروسافت و بعنوانبخشی از دات نت پياده سازی و بلافاصله پس از آن توسط شركت های اينتل، هيوليت پاكاردو مايكروسافت مشتركا، جهت استاندارسازی پيشنهاد گرديد.
زبان #C بگونه ایطراحی شده است كه نه تنها وابستگی به يك Platform خاص را ندارد، بلكه در اغلب مواردوابستگی RunTime نيز ندارد. كامپايلر #C می تواند بر روی هر نوع معماری سخت افزاریطراحی و اجرا گردد. در برخی از نسخه های اوليه كامپايلر زبان فوق كه توسط برخی ازشركت های جانبی ارائه شده است، كدهای #C را به بايت كدهای جاوا كمپايل می كنند. يكیاز چنين كامپايلرهائی را می توان در سايت Halcyonsoft.com مشاهده نمود. بنابراينكدهای #C براحتی قابليت حمل بر روی محيط های متفاوت را دارا خواهندبود. مشخصات تعريف شده زبان #C با ساير استاندارهای تعريف شده ECMA نظير (ECMA-335) CLI (Common Language Infrastructure) بخوبی مطابقت می نمايند. CLI قلبو روح دات نت و CLR(Common Language Runtime) است. اولين نسخه از كامپايلر زبان #C كه از CLI استفاده می كند، NET Framwork. مايكروسافت است. با توجه به مواردگفته شده، مشخص می گردد كه اين زبان بسرعت بسمت استاندارد شدن حركت و با تاييداستانداردهای مربوطه از طرف انجمن های معتبر بين المللی و حمايت فراگير شركت هایمعتبر كامپيوتری در دنيا مسير خود را بسمت جهانی شدن بخوبی طی می نمايد.
#C چيست ؟
طراحان زبان #C با تاكيد و الگوبرداری مناسب از مزايای زبانهائی نظير ++C، C و جاوا و ناديده گرفتن برخی از امكانات تامل برانگيز و كم استفاده شده در هريك از زبانهای فوق، يك زبان برنامه نويسی مدرن شی گراء را طراحی كرده اند. درمواردی، برخی از ويژگی های استفاده نشده و درست درك نشده در هر يك از زبانهای گفتهشده، حذف و يا با اعمال كنترل های لازم بر روی آنها، زمينه ايجاد يك زبان آسان وايمن برای اغلب پياده كنندگان نرم افزار بوجود آمده است. مثلا C و ++C می توانندمستقيما با استفاده از اشاره گرها عمليات دلخواه خود را در حافظه انجام دهند. وجودتوانائی فوق برای نوشتن برنامه های كامپيوتری با كارائی بالا ضرورت اساسی دارد. امادر صورتيكه عملياتی اينچنين بدرستی كنترل و هدايت نگردند، خود می تواند باعث بروزمسائل (Bugs) بيشماری گردد.
طراحان زبان #C، با درك اهميت موضوع فوق، اينويژگی را كماكان در آن گنجانده ولی بمنظور ممانعت از استفاده نادرست و ايجاداطمينان های لازم مسئله حفاظت نيز مورد توجه قرار گرفته است. جهت استفاده از ويژگیفوق، برنامه نويسان می بايست با صراحت و به روشنی خواسته خود را از طريق استفاده از Keyword های مربوطه اعلان نمايند( فراخوانی يك توانائی و استفاده از آن .( #C بعنوان يك زبان شی گراء عالی است. اين زبان First-Class را برای مفهوم Property (Data Member) بهمراه ساير خصائص عمومی برنامه نويسی شی گراء حمايت می كند. در C و ++C و جاوا يك متد get/set اغلب برای دستيابی به ويژگی های هر Property استفاده میگردد. CLI همچنان تعريف Property را به متدهای get/ser ترجمه كرده تا بدين طريقبتواند دارای حداكثر ارتباط متقابل با ساير زبانهای برنامه نويسی باشد. #C بصورتفطری Events ، Declared Value، Reference Type ، Operator Overloading را نيز حمايتمی كند .
كد مديريت يافته
با استفاده از نسخه پياده سازی شده #C توسطمايكروسافت، می توان همواره كد مديريت يافته ای را توليد كرد. يك برنامه #C پس ازكامپايل، بصورت برنامه ای در خواهد آمد كه شامل دستورالعمل های تلفيق شده CIL :
(Common Intermediate Language) است ( درست بر خلاف دستورالعمل های مختص يك ماشينخاص). CIL (گاها با نام MSIL (Microsoft Intermediate Language) با به اختصار IL نيزناميده می شود ) ، در مفهوم مشابه بايت كدهای جاوا بوده و شامل مجموعه ای ازدستورالعمل های سطح پايين قابل فهم توسط تكنولوژی مبتنی بر CLI نظير CLR مايكروسافتخواهد بود. اين برنامه ها بدين دليل كد مديريت يافته، ناميده می شوند كه CLR مسئوليت تبديل اين دستورالعمل ها به كدهای قابل اجرا برروی ماشين و ارائه اغلبسرويس های اساسی برای كدينگ نظير : Garbage Collection، مديريت Heap و عمر مفيد يك Object و يا Type Verification را فراهم می كند.
روش يادگيری #C
يادگيریاين زبان برای افراديكه دارای سابقه آشنائی با يكی از زبانهای برنامه نويسی
++C، C و يا جاوا باشند كار مشكلی نخواهد بود، حتی افراديكه دارای آشنائی اوليه باجاوااسكريپت و يا ديگر زبانهای برنامه نويسی نظير ويژوال بيسك می باشند، امكان پذيرو راحت خواهد بود. برخی از برنامه نويسان حرفه ای بر اين باور هستند كه #C نسبت به VB.NET با اقبال بيشتر و سريعتری مواجه خواهد شد، چراكه #C نسبت به ويژوال بيسكخلاصه تر است. حتی برنامه های بزرگ و پيچيده ای كه توسط #C نوشته می گردند خواناتر،كوتاه و زيبا خواهند بود. برخی از ويژگی های ارائه شده در #C نظير Unsigned Integer، Operator OverLoading و امنيت بيشتر Type ها، در VB.NET وجود نداشته و اينامر می تواند دليلی بر فراگيرتر شدن #C نسبت به VB.NET نزد برنامه نويسان با تجربهباشد.
برای يادگيری هر يك از زبانهای حمايت شده در دات نت، می بايست از
BCL (Basic Class Library) مربوط به NET Framework. شروع كرد . #C خود صرفا دارای ۷۷کلمه کليدی يا Keyword بوده كه برای اكثر برنامه نويسان غريب نخواهند بود. در مقابل BCL، دارای ۴۵۰۰ كلاس و تعداد بيشماری متد و Property است كه برنامه نويسان #C، میتوانند از آنها برای انجام عمليات دلخواه خود استفاده نمايند. شايد يكی از مسائلقابل توجه جهت يادگيری اين زبان برای برخی از برنامه نويسان حرفه ای عدم وجود برخیاز ويژگی ها و امكاناتی باشد كه در گذشته و از طريق ساير زبانهای استفاده شده،بخدمت گرفته می شدند. مثلا عدم وجود امكاناتی جهت توارث چندگانه (MI) سلسله مراتبیيك شئ .
خلاصه
بدون شك فراگيری و تسلط بر زبان #C بمنزله كسب يك پتانسيلبا ارزش بوده كه ثمرات آن برای برنامه نويسان در حال و آينده ای نه چندان دور بيشترهويدا خواهد شد. استاندارد بودن و وجود كتابخانه ای مملو از كلاس اين اطمينان رابوجود خواهد آورد كه با فراگيری زبان فوق و كسب، مهارت های لازم، به يك توانائی فرامحيطی جديد دست پيدا خواهيم كرد كه امكان استفاده از آن بر روی محيط های متفاوتوجود خواهد داشت. ويژگی ها و قابليت های بيشمار اين زبان از جمله دلايل قانع كنندهديگری است كه فراگيری آن را توجيه پذير و منطقی می كند.
طي سلسله مقالاتي مي خواهيم با C# بيشتر آشنا شويم. فرض اين مقالات بر اين است كهآشنايي مختصري با زبانهاي برنامه نويسي داريد ، هر چند كار ما تقريبا از صفر شروعمي شود و هدف آن سادگي هر چه بيشتر است.
C# از دو زبان C++ و Java متولدشده است! حاوي بسياري از جنبه هاي C++ مي باشد اما ويژگي هاي شيء گرايي خودش را ازجاوا به ارث برده است.
C# اگرچه از C++ گرفته شده است اما يك زبان "خالص" شيء گرا
(Object Oriented) مي باشد. هر دو زبان ياد شده جزو زبانهاي هيبريد محسوبمي شوند اما طراحان C# اين مورد را به اندازه ي C++ مهم تلقي نكرده اند. يك زبانهيبريد اجازه ي برنامه نويسي با شيوه هاي مختلف را ميسر مي كند. دليل اينكه C++ هيبريد است ، اين است كه قرار بوده تا با زبان C سازگار باشد و همين امر سبب گرديدهتا بعضي از جنبه هاي C++ بسيار پيچيده شوند.
زبان سي شارپ فرض اش بر ايناست كه شما مي خواهيد تنها برنامه نويسي شيء گرا انجام دهيد و همانند C++ مخلوطي ازبرنامه نويسي رويه ايي (Procedural) و شيء گرا را نمي خواهيد به پايان برسانيد. بنابراين بايد طرز فكر خودتان را با دنياي شيء گرايي تطبيق دهيد. در ادامه خواهيدديد كه در سي شارپ هر چيزي شيء است حتي يك برنامه ي سي شارپ.