PDA

نسخه کامل مشاهده نسخه کامل : ریختن متغیر پسر در پدر



Life24
13-11-2013, 09:25
سلام

using System;
namespace ConsoleApplication9
{
class X
{
int a;
void A()
{

}
}
class Y : X
{
int b;
void B()
{

}

}
class Program
{
static void Main(string[] args)
{
X x1 = new Y();
}
}
}


در مثال بالا کلاس B حاوی 1 متغیر و 1 تابع اضافه تر هست،چگونه هست که میتواند در متغیری از جنس X ذخیره شود؟ تکلیف این تابع و فیلد اضافه اش چی یشه و کجا ذخیره میشه؟!

Msba
13-11-2013, 21:35
جایی نمی رود! ذخیره سازی هم از نوع Y هست یعنی همه چی دارد. حالا شما آن را در قالب پدر قرار دادید.
پس یکسری امکانات را در نظر نگرفته اید. فرض کنید با new کردن کلاس Y شما یکسری خانه ی حافظه را رزرو کردید مثلا 10 بایت. حالا یک اشاره گر به آن وصل می کنید که آن از نوع پدر هست و از این 10 بایت 8 بایت استفاده می کند. این یعنی اینکه اون 10 بایت هست اما شما صحیح از آن استفاده نمی کنید. بارها این گونه نوشته ایم:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
این هم دقیقا همان مصداق است.
حالا کافیست تا یک cast صحیح انجام شود تا اشاره گر جدید بتواند به آن 10 بایت متصل شود نه 8 بایت یعنی استفاده از خود پسر.

موفق باشید.