تعریف ضمنی متغیرهای محلی

مطالبی که در این مقاله یاد خواهیم گرفت :

- خلاصه ای از نحوه تعریف متغیر در سی شارپ

- متغییر ضمنی چیست ؟

- تعریف متغیر ضمنی 

- مقدار دهی و محدودیت های متغیرهای ضمنی

 

برای تعریف متغیر در زبان سی شارپ ابتدا نوع(Data Taye) آن را مشخص و بعد نام متغیر را می نویسیم :

//data type variableName = initial value;

int myint=1;

در صورتی که بخواهیم به متغیر تعریف شده  ، #C یک مقدار پیش فرض به آن نسبت دهد به صورت زیر عمل می کنیم :

int myint=new int(); 

(برای int مقدار پیش فرض 0 می باشد) 

 

با اینکه تعریف متغیرهای محلی به صورت صریح عادت خوبی می باشد اما در #C امکان تعریف متغیرها به صورت ضمنی ، توسط کلمه کلیدی var امکان پذیر می باشد .

متغییر ضمنی چیست :

 تعریفی خیلی ساده که می توان  برای متغیرهای ضمنی  بیان کرد ، نوع متغییر مشخص نمی باشد و با اولین مقدار دهی به متغیر نوع آن مشخص می شود .

در صورتی که بخواهید متغیری را بدون مشخص کردن نوع آن تعریف کنید از کلمه کلیدی var به صورت زیر استفاده می کنیم .

var myint=0;

var mystring="آموزش طراحی وب سایت";

با این روش تعریف متغیرها در هنگام کامپایل ، کامپایلر با نگاه کردن به مقدار اولیه که به متغییر نسبت داده شده است نوع آنرا مشخص می کند .که در مثال بالا نوع myint از نوع int و mystring  از نوع string می باشد .

از طریق کاربرد روشی به نام Reflection (انعکاس) می توانیم نام نوع یک متغییر را بدست آورد :

var myint=0;

Console.WriteLine("myint is a : {0}",myint.GetType().Name); 

مواردی که در هنگام تعریف متغییرهای ضمنی باید به آن توجه داشته باشید :

- در هنگام تعریف متغییر به صورت ضمنی حتما باید مقدار دهی اولیه صورت بگیرد در غیر اینصورت با خطای زیر برخورد خواهید کرد :

Error ! must assign a value 

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

var Myint=0;

Myint="سئو"; // Error !  can't assign string data to a numerical

محدودیت های متغیر های ضمنی :

- تعریف متغیرهای ضمنی فقط داخل متدها و خصوصیات کلاس ها امکان پذیر است .

- نمی توان مقادیر برگشتی متدها را از نوع ضمنی تعریف کرد .

- فیلد های کلاس ها را نمی توان به صورت ضمنی تعریف کرد .

 class TypeVar

{

//Error ! var con not be used as field data

var myint=10;

//Error ! var con not be used as return value or parameter type

Public var Add(var x,int y){}

}

* متغیرهای محلی که با دستور var تعریف می شوند باید در همان محل تعریف مقدار دهی اولیه بشوند و نمیتوان به متغییرهای ضمنی مقدار null نسبت داد . با نسبت دادن مقدار null کامپایلر نمی تواند نوع متغیر را مشخص کند . 

می توان مقدار یک متغیر ضمنی را برابر با یک متغیر دیگر قرار داد ، چه این متغیر به صورت ضمنی تعریف شده باشد یا نشده باشد .

var myint=0;

var anotherint=myint;

از آنجایی که نوع یک متغیر همواره مشخص است می توان یک متغیر ضمنی را در صورتی که نوع آن با نوع برگشتی متد یکسان باشد برگشت داد .

Static int GetAnInt()

{

return myint=0;

* هرگز نمی توان یک متغیر تهی پذیر که به صورت ? مشخص می شود را  با روش ضمنی تعریف کرد .

به عنوان نکته آخر در مورد این بحث باید گفت که پس از انکه متغیری را به صورت ضمنی تعریف و مقداری را به آن نسبت دادید پس از آن متغیر تعریف شده مانند هر متغیر دیگری که با نوع خاص مشخص شده است تلقی می شود و انتساب هر نوع داده دیگری غیر از آنجه که در ابتدا به آن نسبت داده شده است باعث خطای زمان ترجمه خواهد شد .


توسط : عثمان رحیمی  2 ماه قبل ، چهارشنبه 26 شهریور 1393 ساعت 21:09  0  1917

نظر شما برای ما مهم است و به ما در بهبود سایت کمک میکند.


ارسال نظر
  • نام (اختیاری ) :
  • پست الکترونیک :
  • توضیحات :

مطالب مرتبط