بررسی ویژگی های زبان #C

 

 

بارگذاری عملگرها (operator overloading)

در #C نیز همانند ++C، کاربر این امکان را دارد که یک عملگر را برای نوع خاصی از داده بارگذاری کند. در نتیجه کد نوشته شده بسیار ساده تر می شود. در #C، تمام عملگرها به صورت ایستا تعریف می شوند. البته تعداد آنها محدود بوده و به عنوان مثال constantنمی توانند باشند.  class Complex {static Complex operator + (Complex c1, Complex c2) {}};  

تنها عملگر های زیر را می توان overload کرد 

Unary Operators

+  -  !  ~  ++  --  true  false

Binary Operators 
+   -   *  /  %  &  |  ^  <<  >>  ==  !=  >  <   >=   <=

 

ساختارهای تصمیم گیری

ساختارهای تصمیم گیری در #C شامل if و switch-case می باشد. هر دو عبارت if وswitch توسط عبارتهای Boolean  کنترل می شوند. در switch همه انواع را می توان به کار برد. برنامه نویسان زبان C و ++C به خوبی با این ساختارها و نحوه ی استفاده از آنها آشنا هستند.

کپسوله سازی (encapsulation)

قابلیت کپسوله سازی با کلمات کلیدی public، private، protected و internal پیاده سازی میشود. کلمه internal برای دسترسی کلاس های همان بسته (package) به متغیرها و کلاس های مربوطه استفاده میشود. کسانی که با زبان های شی گرا برنامه نویسی کرده اند، با این سطوح دسترسی و چگونگی استفاده از آنها آشنا هستند.

 

وراثت (inheritance)

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

با استفاده از کلمه کلیدی sealed در #C می توان جلوی به ارث بردن از یک کلاس را گرفت:

 

public sealed class A : Class1, Interface1, Interface2 {}

 

چند ریختی (polymorphism) و متدهای مجازی

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

در #C توابع به صورت پیش فرض در کلاس های به ارث برنده قابل بازنویسی نیستند و در صورت نیاز کلاس پدر باید از کلمه کلیدی virtual استفاده کند. کلاس فرزند نیز باید با بکار بردن کلمه کلیدی override به ارث بردن متد را اعلام کند. همچنین کلاس فرزند می تواند با استفاده از کلمه کلیدی sealed از به ارث رسیدن این متد به فرزندان خود جلوگیری کند. همچنین برای اینکه مشکل مخفی شدن متد پدر ایجاد نشود، زبان  #C کلاس فرزند را ملزم می کند که مخفی شدن را به صورت غیر ضمنی با کار بردن کلمه کلیدی new اعلام کند. به این روش نسخه گذاری (versioning) گفته می شود.

همچنین می توان یک متد را به صورت مجرد با استفاده از کلمه کلید abstract، تعریف کرد تا در کلاس های به ارث برنده بدنه آن نوشته شود.

public abstract class A

{

            public virtual void f() {}

            public abstract void g() ;

            public void h() {}

}

 

public class B : A

{

            public sealed override void f( ) {}

            public override void g( ) {}

            public new void h( ) {} // explicitly hides A::h

}

Boxing  و Unboxing

این مفهوم اولین بار توسط زبان #C معرفی شد. #C زبانی کاملا شی گراست و حتی با انواع داده ای اصلی خود نیز مانند object برخورد می کند.

Console.WriteLine(1.ToString());

 

 به اینگونه که در صورت نیاز، متغیرهای از نوع داده اصلی ( مانند int ) به نوع کلاسی آن ( یعنی  Integer ) تبدیل (Boxing ) میشود. همچنین، در صورت نیاز از کلاسی از نوعInteger نیز قابل تبدیل ( Unboxing ) به نوع داده ای int است.

object o = 1; //    boxing

int x = (int) o; //  unboxing

 

ثابت ها

در #C از کلمه کلیدی readonly برای تعیین مقادیر ثابت استفاده می شود. البته کلمهconst نیز جزو کلمات کلیدی #C  است و تقریبا همان کار readonly را می کند.

 

Enum Data Types

در #C نیز همانند ++C می توان enum تعریف کرد که تنها مقادیر خاصی را بپذیرد. با این تفاوت که در #C هر متغیر حتما مقدار معتبری را دارد و همچنین می توان در زمان اجرا نام آن را چاپ کرد. اگرچه enum در #C عملا کلاس است ولی می توان آن را در بلوک های تصمیم گیری switch-case نیز استفاده کرد و در کل می توان گفت پیاده سازی مناسبی دارد.

 

/ 4 نظر / 53 بازدید
مدریت voxnews

ما در یک گروه بزرگیم پرشین بلاگ برای اینکه در سراسر اینترنت پخش بشیم و در سایت های معروف همچون گوگل و یاهو در فهرست های اول موضوع سرچ بشیم باید یکدیگر را لینک کنیم . www.voxnews.persianblog.ir

نجمه

با سلام میشه درباره فضاهای نام درسی شارپ توضیح بدین.مثلا استفاده از tutorial و using چه موقع است؟ ممنون میشم

فهیمه

بازه قابل قبول برای int در زبان c چقدر هست؟ و float m,n = 2.5 ایا مقدار m و n هردو میشود 2.5 یا فقط مقدار یکیشون؟ ممنون میشم بهم جواب بدید منتظرم[گل]

فهیمه

بازه قابل قبول برای int در زبان cچقدر هست؟ اگه float m, n =2.5باشه m و n هردو مقدار 2.5 میگیرند یا فقط یکیشون؟