در پست قبلی در هنگام ست کردن مقدار به درون فیلدهای کلاس هیچ شرایط خاصی وجود نداشت و هر مقداری را از اعداد صحیح به آنها می دادیم برنامه آن را می پذیرفت . اکنون حالتی را در نظر بگیرید که ما بخواهیم برای پذیرفتن اعداد پیشنهادی شرایط و مقررات خاصی را اعمال کنیم و هر عددی را از کاربر و یا از رویدادهای درون کلاس نپذیریم حال چگونه اینکار را می توانیم انجام دهیم. اینکار با کمک گت و ست کردن یک مقدار متعلق به یک فیلد درون برنامه بصورت دستی و با کمک get و set صورت می گیرد در این حالت است که طبق آنچه در تصویر مشاهده می کنید شرط گذاشتن برای هر دو حالت get و set امکان پذیر می شود که البته در اینجا ما فقط برای set کردن شرط گذاشته ایم تا اعداد ورودی فقط بین 0 تا 255 باشند .
در تصویر زیر نیز می بیندکه باز باید از کلاس یک نمونه بسازیم و با دسترسی به فیلد مربوطه عدد دلخواه را درون آن ست کنیم . مثلا در اینجا عدد 37 می باشد که چون این عدد بین 0 و 255 می باشد پس شرایط مورد نظر را داشته پس بنابر این روی لیبل برنامه چاپ می شود .
ساخت یک کلاس ساده در سی شارپ
در این پست روش ساخت یک کلاس ساده که حاوی یک متد برای محاسبه حجم مکعب می باشد را توضیح می دهیم.
طبق آنچه در تصویر می بینید یک کلاس با نام Myclass ساخته شده که دارای سه فیلد می باشد که اندازه های لازم برای محاسبه حجم مکعب هستند.(طول ، عرض و ارتفاع) . یک متد نیز با نام Volume نیز درون کلاس می باشد که می تواند این سه اندازه را در هم ضرب کرده و یک عدد صحیح را به برنامه برگرداند.
در تصویر پائین نیز که مربوط به کدهای رویداد کلیک یک دکمه روی فرم برنامه می باشد نیز ابتدا از Myclass یک نمونه به نام Sample ساخته شده . به کمک این نمونه ما می توانیم ابتدا به فیلدهای کلاس دسترسی داشته و مقداری را درون آنها ست کنیم . سپس با کمک متد برنامه و اجرای آن عدد بدست آمده توسط متد Volume را به ویژگی text یک لیبل اختصاص داده ایم .
تفاوت عملگرهای & و && در سیشارپ
عملگرهای & و && هر دو به معنی "و" (AND) هستن و توی منطق برنامهنویسی برای ترکیب شرطها استفاده میشن، اما یه تفاوت کلیدی بینشون وجود داره که میتونه توی عملکرد کدمون تأثیر بذاره. آمادهاید این راز رو کشف کنید؟ با ما همراه باشید!
عملگر & AND معمولی
وقتی از & استفاده میکنید، به کامپایلر میگید که همه شرطها رو بدون استثنا بررسی کنه، حتی اگه یکی از شرطها false باشه. یعنی فرقی نمیکنه نتیجه یه شرط چی باشه، سیشارپ تکتک شرطها رو چک میکنه و بعد نتیجه نهایی رو برمیگردونه. این عملگر وقتی مفیده که بخواهید مطمئن بشید همه شرطها اجرا شدن، مثلاً وقتی هر شرط یه کار خاص (مثل یه محاسبه) انجام میده.
مثال:
int a = 5;
int b = 0;
bool result = (a > 0 & b != 0); // هر دو شرط بررسی میشن
Console.WriteLine(result); // خروجی: false
عملگر && AND کوتاهمدار
حالا بیایید سراغ && بریم، که یه جورایی باهوشتره! این عملگر به محض اینکه یه شرط false بشه، دیگه بقیه شرطها رو بررسی نمیکنه و مستقیم میره سراغ نتیجه. به این رفتار میگن ارزیابی کوتاهمدار (Short-Circuit Evaluation). چرا این مهمه؟ چون باعث میشه کدمون سریعتر اجرا بشه و از خطاهای احتمالی (مثل تقسیم بر صفر) جلوگیری کنه، بهخصوص وقتی شرطهای بعدی به نتیجه شرط اول وابسته باشن.
مثال:
int a = 5;
int b = 0;
bool result = (a > 0 && b != 0); // شرط دوم بررسی نمیشه چون b == 0
Console.WriteLine(result); // خروجی: false
تفاوت اصلی چیه؟
&: همه شرطها رو همیشه چک میکنه، حتی اگه لازم نباشه.
&&: به محض دیدن یه false، دست از کار میکشه و ادامه نمیده.
مثال عملیتر:
int x = 0;
bool check = (x != 0 & 10 / x > 2); // خطا میده چون 10 / 0 بررسی میشه
int x = 0;
bool check = (x != 0 && 10 / x > 2); // خطا نمیده چون شرط دوم چک نمیشه
کی از کدوم استفاده کنیم؟
از & وقتی استفاده کنید که بخواهید همه شرطها اجرا بشن، مثلاً برای محاسبات یا بررسیهای خاص.
از && وقتی استفاده کنید که بخواهید کدهاتون بهینهتر و ایمنتر باشه و نیازی به چک کردن بقیه شرطها بعد از یه false نباشه (که توی اکثر موارد همین رو میخواهیم!).
تفاوت عملگرهای | و || در سیشارپ
عملگرهای | و || هر دو به معنی "یا" (OR) هستن و توی منطق برنامهنویسی برای ترکیب شرطها به کار میرن، اما یه فرق مهم بینشون هست که میتونه روی رفتار کدمون تأثیر بذاره. کنجکاوید بدونید این تفاوت چیه؟ بیایید با هم شیرجه بزنیم توی این موضوع!
عملگر | (OR) معمولی
وقتی از | استفاده میکنید، به سیشارپ میگید که همه شرطها رو کامل بررسی کنه، حتی اگه یکی از شرطها true باشه و نتیجه کلی مشخص شده باشه. به عبارت دیگه، این عملگر تکتک شرطها رو چک میکنه و بعد نتیجه نهایی رو میده. این میتونه مفید باشه وقتی بخواهید مطمئن بشید همه شرطها اجرا شدن، مثلاً وقتی هر شرط یه عملیات خاص (مثل یه محاسبه) داره.
مثال:
int a = 5;
int b = 0;
bool result = (a > 0 | b > 0); // هر دو شرط بررسی میشن
Console.WriteLine(result); // خروجی: true
عملگر || (OR) کوتاهمدار
حالا نوبت || هست که یه کم زیرکتر عمل میکنه! این عملگر به محض اینکه یه شرط true بشه، دیگه بقیه شرطها رو نگاه نمیکنه و نتیجه رو برمیگردونه. به این میگن ارزیابی کوتاهمدار (Short-Circuit Evaluation). این رفتار باعث میشه کد سریعتر اجرا بشه و از بررسیهای غیرضروری یا خطاهای احتمالی جلوگیری کنه، مخصوصاً وقتی شرطهای بعدی به شرط اول وابسته باشن.
مثال:
int a = 5;
int b = 0;
bool result = (a > 0 || b > 0); // شرط دوم بررسی نمیشه چون a > 0 trueه
Console.WriteLine(result); // خروجی: true
تفاوت اصلی کجاست؟
| : همیشه همه شرطها رو چک میکنه، حتی اگه لازم نباشه.
|| : به محض دیدن یه true، بقیه رو ول میکنه و میره جلو.
مثال عملیتر:
int x = 0;
bool check = (x == 0 | 10 / x > 2); // خطا میده چون 10 / 0 بررسی میشه
int x = 0;
bool check = (x == 0 || 10 / x > 2); // خطا نمیده چون شرط دوم چک نمیشه
کی از کدوم استفاده کنیم؟
از | وقتی استفاده کنید که بخواهید همه شرطها اجرا بشن، مثلاً برای محاسبات یا بررسیهایی که باید کامل انجام شن.
از || وقتی استفاده کنید که بخواهید کدهاتون سریعتر و ایمنتر باشه و بعد از یه true نیازی به ادامه نداشته باشید (که معمولاً همین رو ترجیح میدیم!).