PDA

View Full Version : سوال: checked و unchecked



mohammadghaderian.bp
دوشنبه 29 آذر 1389, 18:47 عصر
سلام

بچه ها کاربرد checked و unchecked چیه ؟؟؟؟

یه کد پیدا کردم نفهمیدم



int a = 1000000;
int b = 1000000;
int c = checked (a * b); // Checks just the expression.
checked // Checks all expressions
{ // in statement block.
...
c = a * b;
...
}

mmd2009
سه شنبه 30 آذر 1389, 02:39 صبح
با سلام

checked یک keyword هستش که باعث فعال شدن overflow میشه . خیلی راحتر بگم منظورش اینه

تو مثلا ماشین حساب دیدی که دوتا عدد بزرگ رو ضرب میکنی ولی جواب یه چیز عجیب در میاد ، تو با این کلمه کلیدی و یک بلوک try ، carch میتونی overflow رو فعال بکنی و بگی اصلا این ایاد داره.

اینو با مثال بیشتر مشخص می کنم برات.

مثال خودت رو ببین 3 متغیر explicitly تعریف کرده و اومده مقدار a رو در b ضرب کرده و میخواد بریزه به c

حالا فرض کن جواب رو بخواهیم اینطوری به خروجی بفرستیم :



int a = 1000000;
int b = 1000000;
int c = a * b;
Console.WriteLine(c);
در مثال بالا مقدار خروجی یک عدد عجیب غریب نمایش میده و اصلا ما منفی نداریم ولی جواب منفی میشه.

این برمیگدره به تعارف اولیه کد نویسی که یک متغیر int محدودیت عددی داره این یعنی شما مثلا مجاز به استفاده از اعداد ..... تا .... هستید ( دقیقا یادم نیست ولی حدود 2147483647 تا 2147483639 - هستش)

جواب بالایی یک عدد بزرگتر از 2147483647 میشه پس قاعدتا ایراد میگیره و با یک عدد غیر مجاز جواب ما رو میده

حالا ما میخوام کاری کنیم همچنین ایرادی خطای زمان اجرا داشته باشه و بدونیم تو یک محاسبه خیلی حساس اگر مقدار یه چیزی اشتباه در اومد و کامپایل هم که خطای زمان اجرا نمیده ما بدونیم اون خطا بوده واسه همین از این keyword استفاده می کنیم.

مثال خودتون رو باز با این keyword ببینید :


طبق تعریفی که گفتم اولش این باعث خطای Arithmetic operation resulted in an overflow میشه و خوبیش اینه ما تو عملیات حساس رو این میتونیم حساب بکنیم.



int a = 1000000;
int b = 1000000;
int c = checked(a * b);
Console.WriteLine(c);
خب حالا واسه این کار میتونیم از بلوک try استفاده بکنیم که از برنامه خروج نشه و خطای حاصله رو هم تماشا بکنیم به اینصورت :




try
{
int a = 1000000;
int b = 1000000;
int c = checked(a * b);
Console.WriteLine(c);
}
catch (OverflowException e)
{
Console.WriteLine(e.ToString());
}
میتوین بعنوان یک بلوک هم checked رو بنویسی به این صورت :



try
{
checked
{
int a = 1000000;
int b = 1000000;
int c = (a * b);
Console.WriteLine(c);
}
}
catch (OverflowException e)
{
Console.WriteLine(e.ToString());
}
و در اخر هم بگم از این کلمه کلیدی میتونی برایintegral-type arithmetic operations and conversions استفاده بکنی

موفق باشی.

kamran00f
چهارشنبه 01 دی 1389, 13:54 عصر
سلام

بچه ها کاربرد checked و unchecked چیه ؟؟؟؟

یه کد پیدا کردم نفهمیدم



int a = 1000000;
int b = 1000000;
int c = checked (a * b); // Checks just the expression.
checked // Checks all expressions
{ // in statement block.
...
c = a * b;
...
}

توضیحات آقای mmd200 9 واقعا خوب و حتی میشه گفت زیادی کامل بود. فقط خواستم به طور خیلی خلاصه بگم کارش چیه. هر متغیری یه محدوده ای برای مقدار هایی که میتونه ذخیره کنه داره. اگه شما به یه متغیری مثل int یه عدد بیشتر از محدوده ای که میتونه ذخیره کنه بدی در حالت معمولی هیچ خطایی رخ نمیده ولی متغیر شما به اشتباه مقدار دهی میشه. کلمه checked مشخص میکنه که اگه مقدار شما خارج از محدوده ی متغیر شما بود یک exeption رخ بده و شما متوجه موضوع بشید. حالا میشه کاری کرد که compiler همه ی مقدار دهی هارو یه صورت checked مقدار دهی کنه (که شرعت برنامه پایین میاد) و اون موقع جاهایی که نمی خوای مقدار دهی به صورت checked باشه میتونی از کامه ی unchecked استفاده کنی.