چند سوال درباره شیء گرایی در سی شارپ

بپرسید

0

{{ digitTrunc(content.likes) }}

سلام خدمت تمام آی تی پرویی های عزیز. بنده در حال مطالعه مبحث شیء گرایی در زبان برنامه نویسی سی شارپ بودم که یک سری سوالات برام پیش اومد. ممنون میشم اگه اساتید پاسخ بدن.

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

امیدوارم منظورم رو خوب رسونده باشم. ممنون

دوره های شبکه، برنامه نویسی، مجازی سازی، امنیت، نفوذ و ... با برترین های ایران

پاسخ ها به این سوال

پاسخ ها به این سوال

{{ digitTrunc(post.likes) }}

این پست در تاریخ {{ dateString(new Date(post.deleteDate)) }} توسط {{ post.deletedByUser }} حذف شده است.

دلیل حذف: {{ post.deleteReason ?? 'نامشخص' }}

{{ err }}
{{ post.userAchivements.rhodiumAchievements }}
{{ post.userAchivements.platinumAchievements }}
{{ post.userAchivements.goldAchievements }}
{{ post.userAchivements.silverAchievements }}
{{ post.userAchivements.bronzeAchievements }}
{{ timeSince(new Date(post.date)) }} قبل

برای ثبت پاسخ خود در وب سایت وارد حساب کاربری خود شوید
قابلیت ارسال مطلب توسط مدیریت سایت غیر فعال شده است