CSCIENCE

CSCIENCE

۲۵ مطلب در شهریور ۱۳۹۲ ثبت شده است

تفاوت عملگر as و (type)

باید دانست که:
برای تبدیل صریح نوع داده ها به یکدیگر دو راه وجود دارد
  • استفاده از عملگر as
  • استفاده از عملگر (Type)
تفاوت مهمی که بین این دو روش وجود دارد این است که در روش اول، اگر تبدیل قابل انجام شدن باشد، نتیجه داده ی تبدیل شده است و اگر تبدیل غیر قابل انجام شدن باشد نتیجه null است. اما در روش دوم اگر تبدیل غیر قابل انجام شدن باشد، یک exception از نوع InvalidCastException ارسال می شود.

نحوه ی استفاده از هر دو روش:

Type1  varname1  =  new Type1([args]);
Type2  varname2  =  (Type2) varname1;

Type1  varname1  =  new Type1([args]);
Type2  varname2  =  varname1  as  (Type2);

۰ موافقین ۱ مخالفین ۰ ۰۴ شهریور ۹۲ ، ۰۱:۳۱
cscience

سلام به همه‌ی دوستان

من نویسنده‌ی وبلاگ cscience.mihanblog.com هستم و تصمیم گرفتم برای ادامه با سرویس بیان کار کنم.

وبلاگ قبلی دیگر به روز نمی‌شود.

۵ موافقین ۱ مخالفین ۰ ۰۳ شهریور ۹۲ ، ۱۶:۲۵
cscience
null پذیری

باید دانست که:

در سیشارپ تایپ ها به دو دسته کلی تقسیم می شوند
  • Value Types: تایپ هایی که مستقیما شامل مقدار هستند، مانند تایپ های پایه ای (intdoublefloatdecimal)
  • Reference Types: تایپ هایی که شامل ارجاع به محلی از حافظه هستند که شامل مقدار مربوطه است مانند کلاس ها
یکی از تفاوت های این دو دسته در امکان null بودن آن ها است. Value Typeها مقدار null را قبول نمی کنند. برای اینکه بتوانیم مقدار null به این دسته از تایپ ها نسبت دهیم (null پذیر کنیم) باید از شئ Nullable استفاده کنیم.

Nullable<int> myint = 10;
myint = null;               //No Error!

در یک پروژه که تعداد null پذیر کردن ها زیاد باشد، نوشتن Nullable باعث کاهش خوانایی کد می شود به همین دلیل syntax دیگری برای این کار وجود دارد. کافیست مقابل اسم تایپ از علامت سوال استفاده کنیم:

int? myint = 10;
myint = null;               //No Error!


این نکته از این جهت اهمیت دارد که:
هنگامی که از پایگاه داده های رابطه ای استفاده می کنید به دلیل اینکه این گونه پایگاه داده ها برای فیلدهای نوع های پایه مثل int هم null پذیر هستند، هنگامی که داده null از آن ها خوانده می شود اگر متغیر شما null پذیر نباشد برنامه ی شما exception ارسال خواهد کرد و در صورت کنترل نکردن آن، اجرای برنامه متوقف می شود.
البته null پذیری در جاهای مختلفی می تواند کاربرد داشته باشد. مثال بالا به دلیل واضح تر بودن آورده شده است.
۰ موافقین ۱ مخالفین ۰ ۰۳ شهریور ۹۲ ، ۰۱:۳۰
cscience
رفتار رشته ها و نحوه ی ساختن یک رشته از اجزای آن

باید دانست که:
رشته ها (string) در سیشارپ از نوع غیر قابل تغییر (immutable) هستند. به این معنا که وقتی یک رشته نسبت داده شد، دیگر نمیتوان محتوای همان خانه از حافظه را با رشته ی جدید تغییر داد و نسبت دهی و یا هرگونه تغییر در رشته ی فعلی، باعث ایجاد رشته ی جدید در خانه ی دیگری از حافظه می شود و در نهایت تنها ارجاع رشته ی قبلی به رشته ی جدید تغییر می یابد.

این نکته از این جهت اهمیت دارد که:
وقتی در حال ساختن یک رشته به صورت پویا هستید (به عنوان مثال می خواهید با استفاده از حلقه تمامی اعضای یک آرایه را در یک رشته جمع آوری کنید) هنگامی که تعداد دفعات تغییر رشته زیاد می شود، بخش زیادی از حافظه برای مدتی توسط رشته های قبلی بلا استفاده می شود (تا هنگامی که garbage collector برسه). سیشارپ برای حل اینگونه مشکلات در رشته ها، شئ دیگری را در اختیارمان قرار داده است. با استفاده از یک StringBuilder ابتدا تمامی اجزا رشته را در این شئ جمع آوری می کنید و سپس متد ToString آن را صدا می زنید.



int[] numbers = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
StringBuilder numbersString = new StringBuilder();
foreach (int in numbers)
{
    numbersString.Append(n);
    numbersString.Append(" - ");
}
string s = numbersString.ToString();


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

راه دیگری که برای حل این مسئله وجود دارد استفاده از امکان Join در LINQ است.
۰ موافقین ۰ مخالفین ۰ ۰۳ شهریور ۹۲ ، ۰۱:۲۶
cscience

سر ریز در محاسبات


باید دانست که:

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

int number = int.MaxValue;
int sum = checked(number + 1);

اگر لازم است برای چندین خط محاسبه سرریز بررسی شود، لازم نیست هرکدام را جداگانه در وضعیت checked قرار دهید. تنها لازم است به جای ( ) از { } استفاده کنید و درون آن هر تعداد دستور که می خواهید، قرار دهید.
در نهایت اگر لازم بود برای کل پروژه سرریز بررسی شود، به properties پروژه برید و از شاخه Build گزینه ی Advance را انتخاب کنید. در پنجره ی باز شده بررسی سرریز را فعال و یا غیر فعال کنید.
۰ موافقین ۰ مخالفین ۰ ۰۳ شهریور ۹۲ ، ۰۱:۱۷
cscience