سلام خدمت تمام آی تی پرویی های عزیز. بنده در حال مطالعه مبحث شیء گرایی در زبان برنامه نویسی سی شارپ بودم که یک سری سوالات برام پیش اومد. ممنون میشم اگه اساتید پاسخ بدن.
1. هنگامی که به یک فیلد در کلاس خود مقدار دهیم چه اتفاقی می افتد؟ مقدار داخل فیلد (هنگامی که آن را در کلاس خود مقدار دهی کردیم) به چه کار می آید؟ این فیلد با فیلدی که آن را درون کلاس مقدار دهی نکردیم چه تفاوتی دارد؟
public class Person { public string Name = "AmirHossein"; }
2. در چه صورتی دو شیء بایکدیگر برابرند؟ خروجی کد پایین برای من Not Equal بود:
Contact oContact1 = new Contact(); oContact1.Name = "AmirHossein"; oContact1.Number = "0937"; oContact1.Email = "a@a.com"; Contact oContact2 = new Contact(); oContact2.Name = "AmirHossein"; oContact2.Number = "0937"; oContact2.Email = "a@a.com"; if (oContact1 == oContact2) Console.WriteLine("Equal"); else Console.WriteLine("Not Equal");
3. آیا اشیاء و کلاس ها از نوع Reference Type هستند؟
4. و سه سوال آخرم که مهمترین سوالاتم هستند:
- ما برای اینکه یک متغیر رو به عنوان پارامتر به متد پاس بدیم و از اون به جای ورودی، خروجی بگیریم، از کلمه های کلیدی out و ref استفاده می کردیم. حالا من متوجه شدم وقتی یک شیء از یک کلاس رو به عنوان پارامتر به متد پاس میدیم انگار خودش به طور پیشفرض کلمه ref یا out رو داره (منظورم اینه که هرتغییری روی پارامتر مربوطه در متد انجام بدیم، روی شیء ای که به عنوان آرگومان به متد پاس دادیم نیز اتفاق می افته) درسته؟ اون وقت چطور میشه این قابلیت رو غیرفعال کرد (منظورم اینه که چطوری یه کاری کنیم اینطوری نباشه)؟ درضمن من فهمیدم که آرایه هاهم مثل شیء ها این خاصیت رو دارن؟ درسته ؟
-- و این سوالم هم وابسته به سوال بالاست. اون خصوصیت اشیاء (وهمچنین آرایه ها) (همون خصوصیت که هرتغییری روی پارامتر مربوطه در متد انجام بدیم، روی شیء ای که به عنوان آرگومان به متد پاس دادیم نیز اتفاق می افته) به خاطر چیه؟ آیا این خاصیت به خاطر Reference Type بودن اون ها هست؟؟؟ اگه جواب این پرسش بله است، پس چرا نوع های داده ی string و object که میدونیم از نوع Reference Type هستن این خصوصیت رو ندارن؟؟
-- و سوال آخرم که شاید بیشتر مربوط به داده ها باشه تا شی گرایی: من فهمیدم که نوع های داده string و object از نوع Reference Type هستن. اما چرا خروجی کد پایین در هر دو بار "Hello" هست؟ (یعنی چرا بعد از تغییر myStr1، متغیر myStr2 تغییر نکرد؟؟ (همونطور که میدونید در انواع داده رفرنس تایپ، برای مثال در این کد باید پس از عوض کردن مقدار متغیر اول، مقدار متغیر دوم نیز تغییر کنه.)) :
string myStr1 = "Hello"; string myStr2 = myStr1; Console.WriteLine(myStr2); //myStr2 value: "Hello" myStr1 = "Good Bye"; Console.WriteLine(myStr2); //myStr2 value: "Hello" Again
امیدوارم منظورم رو خوب رسونده باشم. ممنون
این پست در تاریخ {{ dateString(new Date(post.deleteDate)) }} توسط {{ post.deletedByUser }} حذف شده است.
دلیل حذف: {{ post.deleteReason ?? 'نامشخص' }}
زمان پاسخ گویی روز های شنبه الی چهارشنبه ساعت 9 الی 18
فقط به موضوعات مربوط به محصولات آموزشی و فروش پاسخ داده می شود