تعریف ضمنی متغیرهای محلی
مطالبی که در این مقاله یاد خواهیم گرفت :
– خلاصه ای از نحوه تعریف متغیر در سی شارپ
– متغییر ضمنی چیست ؟
– تعریف متغیر ضمنی
– مقدار دهی و محدودیت های متغیرهای ضمنی
برای تعریف متغیر در زبان سی شارپ ابتدا نوع(Data Taye) آن را مشخص و بعد نام متغیر را می نویسیم :
1 2 3 |
//data type variableName = initial value; int myint=1; |
در صورتی که بخواهیم به متغیر تعریف شده ، #C یک مقدار پیش فرض به آن نسبت دهد به صورت زیر عمل می کنیم :
1 |
int myint=new int(); |
(برای int مقدار پیش فرض 0 می باشد)
با اینکه تعریف متغیرهای محلی به صورت صریح عادت خوبی می باشد اما در #C امکان تعریف متغیرها به صورت ضمنی ، توسط کلمه کلیدی var امکان پذیر می باشد .
متغییر ضمنی چیست :
تعریفی خیلی ساده که می توان برای متغیرهای ضمنی بیان کرد ، نوع متغییر مشخص نمی باشد و با اولین مقدار دهی به متغیر نوع آن مشخص می شود .
در صورتی که بخواهید متغیری را بدون مشخص کردن نوع آن تعریف کنید از کلمه کلیدی var به صورت زیر استفاده می کنیم .
1 2 3 |
var myint=0; var mystring="آموزش طراحی وب سایت"; |
با این روش تعریف متغیرها در هنگام کامپایل ، کامپایلر با نگاه کردن به مقدار اولیه که به متغییر نسبت داده شده است نوع آنرا مشخص می کند .که در مثال بالا نوع myint از نوع int و mystring از نوع string می باشد .
از طریق کاربرد روشی به نام Reflection (انعکاس) می توانیم نام نوع یک متغییر را بدست آورد :
1 2 3 |
var myint=0; Console.WriteLine("myint is a : {0}",myint.GetType().Name); |
مواردی که در هنگام تعریف متغییرهای ضمنی باید به آن توجه داشته باشید :
– در هنگام تعریف متغییر به صورت ضمنی حتما باید مقدار دهی اولیه صورت بگیرد در غیر اینصورت با خطای زیر برخورد خواهید کرد :
Error ! must assign a value
– در صورت تعریف و مقدار دهی اولیه یک متغییر ضمنی چنانچه مقدار از نوع دیگر را به آن انتساب دهید با خطا مواجه خواهید شد .
1 2 3 |
var Myint=0; Myint="سئو"; // Error ! can't assign string data to a numerical |
محدودیت های متغیر های ضمنی :
– تعریف متغیرهای ضمنی فقط داخل متدها و خصوصیات کلاس ها امکان پذیر است .
– نمی توان مقادیر برگشتی متدها را از نوع ضمنی تعریف کرد .
– فیلد های کلاس ها را نمی توان به صورت ضمنی تعریف کرد .
1 2 3 4 5 6 7 8 9 10 11 12 13 |
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 کامپایلر نمی تواند نوع متغیر را مشخص کند .
می توان مقدار یک متغیر ضمنی را برابر با یک متغیر دیگر قرار داد ، چه این متغیر به صورت ضمنی تعریف شده باشد یا نشده باشد .
1 2 3 |
var myint=0; var anotherint=myint; |
از آنجایی که نوع یک متغیر همواره مشخص است می توان یک متغیر ضمنی را در صورتی که نوع آن با نوع برگشتی متد یکسان باشد برگشت داد .
1 2 3 4 5 6 7 |
Static int GetAnInt() { return myint=0; } |
* هرگز نمی توان یک متغیر تهی پذیر که به صورت ? مشخص می شود را با روش ضمنی تعریف کرد .
به عنوان نکته آخر در مورد این بحث باید گفت که پس از انکه متغیری را به صورت ضمنی تعریف و مقداری را به آن نسبت دادید پس از آن متغیر تعریف شده مانند هر متغیر دیگری که با نوع خاص مشخص شده است تلقی می شود و انتساب هر نوع داده دیگری غیر از آنجه که در ابتدا به آن نسبت داده شده است باعث خطای زمان ترجمه خواهد شد .
دیدگاهتان را بنویسید
برای نوشتن دیدگاه باید وارد بشوید.