زبان برنامه نویسی سی شارپ ونرم افزارهای کاربا آن را بشناسیم

خانه / آشنایی / زبان برنامه نویسی سی شارپ ونرم افزارهای کاربا آن را بشناسیم

 

بعد ازشناخت و انتخاب زبان برنامه نویسی برای کار در آینده اکنون وقت آن است تا برای یادگیری زبان انتخابی دست به کار شویم.

ما قصد داریم آموزش سی شارپ را به شما علاقه مندان به این زبان بیاموزیم یعنی میخواهیم بدانیم برای برنامه نویسی از کجا باید شروع کنیم و ازچه نرم افزارهایی استفاده کنیم.

شیءگرایی زبان برنامه نویسی سی شارپ چیست؟

قبل از شروع میخواهم چند نکته را خدمتتان عرض کنم درابتدا معرفی زبان سی شارپ گفتیم این زبان یک زبان شیءگرا است.

واین سوال پیش می آید که چرا شیءگرایی به یک ارزش در برنامه نویسی تبدیل شده است؟

قبل از پاسخ به این سوال باید بدانیم در زبان های غیر شیءگرا چه میگذرد.

زبان‌های غیر شی گرا از دو موجودیت «داده» و «عملیات» تشکیل می‌شوند.

یعنی کل یک نرم افزار از چندین عملیات (Function) که یک یا چند داده (Data) می‌گیرد ساخته شده که این function تغییرات لازم را روی آن داده‌ها اعمال می‌کند و داده جدید را به function قبلی بر می‌گرداند.

مثلا فرض کنید که ما دو داده نام و نام خانوادگی داریم عملیات مورد نظر ما ساخت نام کامل فرد است:

عملیات: نام + نام‌خانوادگی

این یک نمونه ساده از شیوه کار با زبان‌های غیرشیءگرا بود.

حالا فرض کنید بخواهیم همین عملیات را در زبان برنامه نویسی سی شارپ که یک زبان شیءگرا است پیاده کنیم.

ما دیگر با دو داده مجزا طرف نیستیم یک شی وجود دارد به نام انسان.

انسان دارای یک نام کوچک و یک نام خانوادگی است(از پیش برای شی انسان مشخص کرده‌ایم ) به وسیله یک function – که چطور نام کامل می‌سازدحالا یک انسان داریم که نام کامل دارد.

سخت شد؟ همان غیر شیءگرا بهتر بود؟ شاید درک زبان‌های شیءگرا به نظر کمی سخت‌تر بیاید، اما باید بگویم که ما هر روز در زندگی با اشیا و شیءگرایی سر و کار داریم. پس عجله نکنید دربحثی جداگانه کامل به مبحث شیءگرایی میپردازیم  وزمانی که به درک درستی ازآن رسیدیم پی به قدرت آن میبریم.

ویژگی های بارزسی شارپ نسبت به زبان های دیگر:

پس به یک درک کلی ازمفهوم معرفی شیءگرایی رسیدیم سوالی دیگه ای که پیش میاد این هست که آیا سی شارپ فقط به خاطر شیءگرایی محبوبیت پیداکرد؟

زیرا زبانی مانند ++c نیزیک زبان شیءگرا میباشد که طرفداران خاص خودش رادارد اماچرا سی شارپ به این توسعه درانواع زمینه هایی چون وب ،اپلیکیشن و….. نفوذ کرده است؟

برخی از ویژگی هایی که #C را از C و  C++ و جاوا متمایز می کنند شامل موارد زیر است:

1.قابلیت حمل:

زبان برنامه نویسی سی شارپ طوری طراحی شده است که مستقیما نمایانگر زیرساخت زبان مشترک است. بیشتر نوع های درونی آن متناظر با نوع های مقداری است که توسط فریم ورک CLI بکار گرفته شده است.

هرچند در مشخصات زبان، لزومات تولید کد کامپایلر آورده نشده است، یعنی نگفته است که یک کامپایلر C# باید یک  زبان مشترک را هدف قرار دهد یا زبان واسطه مشترک تولید کند یا هر فرمت خاص دیگری را تولید کند.

به صورت تئوری، یک کامپایلر C#‌ می تواند مانند کامپایلرهای سنتی C++ یا Fortran، کدهای ماشینی تولید کند.

2.وابستگی به نوع:

زبان برنامه نویسی سی شارپ از اعلان های متغیرهای ضمنی وابسته زیاد به نوع با کلمه کلیدی var  و از آرایه های نوع ضمنی با کلمه کلیدی new []  به همراه یک آغازگر Collection پشتیبانی می کند.

زبان برنامه نویسی سی شارپ از یک نوع داده بولی محض با کلمه کلیدی bool  پشتیبانی می کند.

عبارات شرطی مانند while  و if  نیازمند یک Expression از نوعی هستند که از عملگر true  استفاده می کند، مانند نوع بولی.

با اینکه C++ یک نوع بولی دارد، می توان آن را آزادانه به اعداد صحیح تبدیل کرد و Expressionهایی مانند (if(a تنها نیاز به این دارند که a  قابل تبدیل به bool باشد و اجازه می دهند a  یک int یا یک نشانگر باشد.

زبان برنامه نویسی سی شارپ اجازه این رویکرد “اعداد صحیح به معنی true یا false” را نمی دهد.

به این دلیل که وادار کردن برنامه نویس ها به استفاده از عباراتی که نتیجه آنها دقیقا bool  است می تواند از بروز برخی مشکلات برنامه نویسی جلوگیری کند.

مانند (i f (a = b  که استفاده از اختصاصگر =  به جای برابری ==  که با اینکه در C یا C++ یک خطا نیست، توسط کامپایلر مشخص می شود.

زبان برنامه نویسی C# بیشتر از C++ ایمنی نوع دارد. تنها تبدیل های ضمنی پیش فرض آنهایی هستند که ایمن هستند، مانند گسترش دادن اعداد صحیح.

این کار در زمان کامپایل کردن،  گاهی مواقع هنگام اجرا صورت می گیرد.

هیچ تبدیل ضمنی بین مقادیر بولی و اعداد صحیح صورت نمی گیرد، همچنین بین اعداد شمارشی و اعداد صحیح .

هر نوع تبدیل توسط کاربر باید به عنوان واضح یا ضمنی مشخص شود، برخلاف Constructorهای کپی و عملگرهای تبدیل C++ که هر دو به طور پیش فرض ضمنی هستند.

3.برنامه نویسی متا:

برنامه نویسی متا از طریق خصیصه های زبان سی شارپ بخشی از این زبان است.

بسیاری از این خصیصه ها، کارایی GCC ها و دایرکتیوهای پیش پردازنده مبتنی بر پلتفرم ++Visual C را تکثیر می کنند.

4.متدها و توابع:

زبان برنامه نویسی سی شارپ اجازه متغیرها یا توابع Global را نمی دهد. تمام متدها و اعضا باید در داخل کلاس ها اعلان شوند.

اعضای استاتیک از کلاس های Public می توانند جایگزین متغیرها و توابع Global شوند.

مانند C++ و برخلاف جاوا، برنامه نویس های #C باید از کلمه کلیدی Virtual  استفاده کنند تا اجازه دهند متدها توسط زیرکلاس ها بازنویسی و Override شوند.

متدهای Extension در #C به برنامه نویس ها اجازه می دهند از متدهای استاتیک استفاده کنند، مانند اینکه آنها از جدول متدهای یک کلاس گرفته شده باشند و به برنامه نویس ها اجازه می دهند به یک شی متدی اضافه کنند که حس می کنند باید روی آن شی و مشتقات آن وجود داشته باشد.

نوع dynamic  اجازه اتصال متد Run-time‌ را می دهد و اجازه فراخوانی های متد مانند جاوا اسکریپت و ترکیب بندی شی در زمان اجرا را می دهد.

زبان سی شارپ از نشانگرهای تابع با وابستگی زیاد به نوع از طریق کلمه کلیدی delegate  پشتیبانی می کند.

مانند Signal‌ و Slot شبه C++ مربوط به فریم ورک Qt، سی شارپ هم دارای معناشناسی در زمینه رویدادهای به سبک انتشار-اشتراک است، البته C#‌ برای این کار از delegate ها استفاده می کند.

5.Property:

زبان سی شارپ Property هایی به عنوان شکل نحوی برای یک الگوی رایج ارائه می کند که در آن یک جف متد( accessor getter = دریافت کننده) و (mutator setter = تنظیم کننده تعویض) عملیات ها را روی یک خصیصه از یک کلاس محصور می کنند. نیازی به نوشتن متدهای اضافی برای بکارگیری getter/setter وجود ندارد و به جای فراخوانی های متد طولانی، از طریق قاعده نحوی خصیصه می توان به property دست یافت.

6.Namespace:

namespace  زبان سی شارپ همان سطح از انزوای کد را مانند Package  در جاوا یا  namespace  ‌در C++ ارائه می کند که قوانین و ویژگی های آن بسیار مشابهpackage  است.

7.دسترسی به حافظه:

در زبان برنامه نویسی C#، از نشانگرهای آدرس حافظه تنها می توان در بلوک هایی استفاده کرد که به عنوان ناامن علامت گذاری شده اند و برنامه هایی که کدهای  ناامن دارند برای اجرا شدن نیاز به مجوزهای مناسب دارند.

بیشتر دسترسی به object‌ از طریق رفرنس ایمن به object انجام می شود که همیشه یا به یک object زنده اشاره دارد یا دارای مقدار null است.

گرفتن رفرنس به یک object مرده (یک object که بازیابی شده است) یا یک بلوک تصادفی از حافظه غیرممکن است.

یک نشانگر ناامن می تواند به یک نمونه از نوع مقداری، آرایه، رشته یا یک بلوک از حافظه که در یک Stack ‌تخصیص داده شده است، اشاره داشته باشد.

کدی که به عنوان ناامن علامت گذاری نشده است هنوز می تواند نشانگرها را از طریق نوع System.IntPtr  ذخیره و دستکاری کند، اما نمی تواند رفرنس آنها را حذف کند.

حافظه مدیریت شده را نمی توان به طور واضح آزاد کرد، به جای آن به صورت خودکار بازیافت می گردد.

بازیافت با برداشتن وظیفه آزاد کردن حافظه ای که دیگر مورد نیاز نیست از روی دوش برنامه نویس، مشکل نشت حافظه را رفع می کند.

8.استثنا:

استثنائات چک شده در زبان برنامه نویسی سی شارپ وجود ندارند (برخلاف جاوا).

این یک تصمیم عمدی براساس مشکلات مقیاس پذیری و ورژن پذیری بوده است.

9.چند ریختی:

برخلاف C++، زبان سی شارپ از وراثت چندگانه پشتیبانی نمی کند، البته یک کلاس می تواند از هر تعداد رابط کاربری استفاده کند.

این تصمیم برای جلوگیری از پیچیدگی و ملزومات معماری از طریق CLI ساده گرفته شد.

موقع به کارگیری چندین رابط کاربری که شامل یک متد با امضای مشابهی هستند، C#‌ اجازه می دهد هر متد را بسته به اینکه آن متد از طریق کدام رابط کاربری فراخوانی شده است، بکار بگیریم یا مانند جاوا، اجازه می دهد یک بار متد را به کار بگیریم و آن تنها فراخوانی از طریق هر یک از رابط های کاربری کلاس باشد.

10.برنامه نویسی تابعی:

با اینکه# C  در ابتدا یک زبان دستوری بود، C# 2.0 پشتیبانی محدودی از برنامه نویسی تابعی از طریق توابع کلاس یک و بسته ها به شکل delegate های ناشناس داشت.

C# 3.0 پشتیبانی از برنامه نویسی تابعی را با معرفی یک قاعده سبک برای عبارت های Lambda، متدهای Extension (یک کارایی برای ماژول ها) و یک قاعده list comprehension به شکل زبان query comprehension، گسترش داد.

دسته بندی نوع داده درسی شارپ:

شاید با بعضی ازکلمات که دربخش ویژگی های سی شارپ گفته شد آشنا نباشید اما نگران نباشید در ادامه مفاهیم با آنها آشنا خواهید شد.

همچنین گفتیم یک سیستم ازنوع یکپارچه دارد که به آن سیستم نوع مشترک نیز گویند حالا سیستم نوع یکپارچه چکارمیکند؟

تمام نوع ها مانند اعداد صحیح، زیرکلاسی ازکلاس system.object هستند.

حال به دسته بندی نوع های داده می پردازیم. نوع های داده به دو دسته تقسیم می شوند:

1) نوع های مرجعی:

نمونه های نوع های مقداری دارای هویت ارجاعی یا معناشناسی نیستند .

مقایسه های برابری و عدم برابری برای نوع های مقداری، مقادیر حقیقی داده را در داخل نمونه ها مقایسه می کنند.

نوع های مقداری برگرفته از System.ValueType  هستند، همیشه یک مقدار پیش فرض دارند و همیشه می توانند ایجاد یا کپی شوند.

چند محدودیت دیگر نوع های مقداری این است که نمی توانند از یکدیگر گرفته شوند (اما می توانند رابط ها را به کار گیرند) و نمی توانند یک سازنده پیش فرض واضح (بدون پارامتر) داشته باشند.

نمونه های نوع های مقداری تمام نوع هایی  مانند int (یک عدد صحیح ۳۲ بیتی)، float (یک عدد ممیز شناور  32 بیتی)، char  (یک واحد کد یونیکد ۱۶ بیتی) و System.DateTime  (یک نقطه خاص در زمان با دقت نانوثانیه را شناسایی می کند) هستند.

2)نوع های مقداری:

نوع های مرجعی دارای مفهوم هویت ارجاعی هستند .هر نمونه از یک نوع مرجعی ذاتا متمایز از دیگر نمونه ها است، حتی اگر داده های داخل هر دو نمونه یکی باشد.

این موضوع در مقایسه های پیش فرض برابری و عدم برابری برای نوع های مرجعی مشهود است که به جای برابری ساختاری، برابری ارجاعی را تست می کنند.

به طور کلی، همیشه ممکن نیست که یک نمونه از نوع مرجعی بسازیم یا یک نمونه موجود را کپی کنیم یا یک مقایسه مقداری بین دو نمونه موجود انجام دهیم.

البته نوع های مرجعی خاصی می توانند با رو کردن یک Public Constructor یا بکارگیری یک رابط متناظر چنین خدماتی را ارائه کنند.

مثال هایی از نوع های مرجعی C#:

شامل object (کلاس مبنای نهایی برای تمام دیگر کلاس های)  ،  System.String (یک رشته از کاراکترهای یونیکد) و System.Array  (یک کلاس مبنا برای تمام آرایه های C#) هستند.

هر دو نوع قابل توسعه با نوع های تعریف شده توسط کاربر هستند.

معرفی و شناخت نرم افزارهای کار با زبان سی شارپ:

برای شروع یادگیری زبان برنامه‌نویسی سی شارپ باید نرم‌افزارهای مربوط به آن را بشناسید و سپس روی کامپیوتر شخصی خود نصب کنید.

این نرم‌افزارها به دو دسته کلی IDEها و پایگاه داده تقسیم بندی می‌شوند.

IDEمخفف عبارت integrated development environment به معنای سیستم یکپارچه توسعه‌دهنده می‌باشد.

IDE مناسب برای زبان برنامه‌نویسی #C نرم افزار ساخت شرکت ماکروسافت به نام Microsoft Visual Studio می‌باشد که آخرین ورژن این نرم‌افزار را می‌توانید از وب سایت شرکت ماکروسافت دریافت نمایید. همچنین همراه این نرم‌افزار باید یک IDE مناسب برای ارتباط با پایگاه داده در اختیار داشته باشید که مناسب ترین نرم‌افزار، SQL Server 2012 الی SQL Server 2016 می‌باشد.

 

شروع  زبان برنامه‌نویسی سی شارپ:

پس از تهیه نرم‌افزارهای فوق و نصب آنها روی سیستم عامل موردنظر خود، نرم افزار Visual Studio را باز کرده و سپس مسیر زیر را جهت ایجاد پروژه جدید طی کنید:

ایجاد پروژه زبان برنامه نویسی سی شارپ

سپس از منوی سمت چپ برنامه روی عبارت #Visual C ایستاده و از منوی سمت راست عبارت Console Application را انتخاب کنید.

سپس در انتهای صفحه مشابه آنچه در تصویر زیر مشاهده می‌کنید نام نرم‌افزار یا پروژه‌ی خود را تایپ نمایید.

یک نکته که باید به آن توجه کرد این است تفاوت نام سولوشن با نام پروژه در این است که بطور مثال هنگامی که ما می خواهیم یک برنامه جامع که از چند پروژه تعریف شده است را بسازیم نام سولوشن می بایست متفاوت باشد.

ولی در اینجا چون یک پروژه بیشتر نداریم ( برای برنامه های مبتدی و متوسط ) پس اشکالی هم ندارد که  با نام سولوشن یکی باشد. ودر نهایت دکمه‌ی OK را جهت ایجاد پروژه جدید بفشارید.

ایجاد پروژه جدید زبان برنامه نویسی سی شارپ

در صفحه‌ای که پیش روی شما باز شده است یک سری کد به همراه یک ستون در سمت راست ایجاد می‌شود که این ستون Solution Explorer می‌باشد.

مشاهده می‌کنید، یک فایل با نام Program.cs در این ستون با پسوند cs قرار گرفته که نشان‌دهنده‌ی پشتیبانی از زبان #C است.

این فایل به صورت خودکار ساخته می‌شود و نباید تحت هیچ شرایطی آن را پاک کنید چون لایه‌ی اجرایی برنامه شماست و محتویات درون آن به صورت زیر است:

محیط تولید برنامه زبان برنامه سی شارپ

اجرا برنامه:

برای اجرای اولین برنامه باید دکمه‌ی F5 را بفشارید. در صورتیکه این کار را به درستی انجام داده باشید با تصویر زیر روبه رو خواهید شد:

پنجره اجرای زبان برنامه سی شارپ

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *