50٪ تخفیف روی تمام دوره‌ها!
پایان تخفیف تا:
مشاهده دوره‌ها
0

سوال در مورد تبدیل کلاس پدر و فرزند به یکدیگر

سلام. یک سوال داشتم در مورد تبدیل و کست کردن کلاس های پدر و فرزند به هم که خیلی ذهنم رو درگیر خوش کرده.

به فرض من کدی مثل کد زیر دارم:

    class Parent
    {
    }
    class Child : Parent
    {
    }

خب چیزی که میدونیم اینه که ما اگر یک متغیر از جنس کلاس پدر داشته باشیم، می تونیم شیء از جنس کلاس فرزند رو (به طور ضمنی Implicit) بهش اختصاص بدیم، و اگر متغیری از جنس کلاس فرزند داشته باشیم و بخوایم شیء از جنس کلاس پدر رو بهش اختصاص بدیم، به صورت ضمنی و Implicit قادر به این کار نیستیم و باید به صورت Explicit این تبدیل رو انجام بدیم.

چیزی که ذهن من رو درگیر کرده اینه که فکر می کنم دقیقا باید برعکس باشه، به خاطر اینکه کلاس فرزند طبیعتا ظرفی بزرگتر از کلاس پدر هست، و ما در حالت دوم (ریختن کلاس فرزند توی متغیر از جنس کلاس پدر) داریم یک مقدار بزرگتر رو داخل یک ظرف کوچکتر می ریزیم در این حالت ممکنه از دست رفتن داده پیش بیاد و اینجا باید از مون Explicit Cast بخواد. در حالیکه توی حالت اول (ریختن کلاس پدر توی متغیر از جنس کلاس فرزند)، به دلیل اینکه ظرف کلاس فرزند بزرگتره ما هیچ داده ای رو از دست نمیدیم و اینجا باید به طور Implicit کست بتونه انجام بشه.

این مورد رو من متوجه نمیشم. اگه ممکنه توضیح بدید.

پرسیده شده در 1397/01/05 توسط

1 پاسخ

0

سلام، وقت بخیر

موضوع اینجاست که باید وجوه مشترک کلاس ها رو در نظر بگیرید و در کنارش این رو در نظر بگیرید که شما زمانی که کلاسی از نوع پدر تعریف می کنید ممکنه این کلاس پدر شامل اطلاعاتی از نوع هر یک از فرزندان باشه. کلاس های زیر رو در نظر بگیرید:

public class A
{
}

public class B : A
{
}

public class C : A
{
}

تو قدم بعدی شما شئ های زیر رو ایجاد می کنید:

A bObj = new B();
A cObj = new C();

همونطور که می بینید شئ هایی از نوع B و C تعریف شده که هر دو از A مشتق شدن و به همین خاطر قابلیت تبدیل به A رو دارن. حالا فرض کنید من بگم bObj رو بخوام داخل شئ ای از نوع C بریزم، امکانش نیست، درسته که هر دو از نوع A هستن، اما شئ های ایجاد شده از نوع دو کلاس فرزند متفاوت هست و اینجاست که میگیم هر کلاس فرزند به صورت مستقیم قابل تبدیل به پدر هست، اما برعکس خیر.

پاسخ در 1397/01/07 توسط

پاسخ شما