PDA

View Full Version : گفتگو: تفاوت دقیق Shadow با Override کردن



odiseh
دوشنبه 13 آبان 1387, 08:20 صبح
سلام
لطفا هرکسی که تفاوت دقیقShadow با Override کردن رو می دونه اینجا بنویسه همه استفاده کنن.

mehdi.mousavi
دوشنبه 13 آبان 1387, 13:08 عصر
سلام لطفا هرکسی که تفاوت دقیقShadow با Override کردن رو می دونه اینجا بنویسه همه استفاده کنن.

منظور از Override کردن، ایجاد امکانی هستش تا کاربر بتونه هنگام Subclass کردن یک کلاس، رفتار و کارکرد یک متود رو تغییر بده. بعنوان مثال، شما در کلاس Animal متودی بنام MakeNoise رو بصورت virtual تعریف میکنید. این متود Virtual میتونه توسط کلاس دیگه ای که قراره از Animal درایو بشه، (مثلا کلاس Cat) به نوع دیگه ای پیاده سازی بشه، چون همه حیوانات صدای یکسانی در نمیارن. در نتیجه، در کلاس Cat پیاده سازی MakeNoise باعث تولید صدای گربه میشه. از دید کاربر بیرونی، دسترسی به MakeNoise کلاس Animal میسر نیست، حتی اگر Instance موجود از کلاس Cat رو به کلاس پدر Cast کنه، و متود MakeNoise مربوطه رو اجرا کنه. چون متود مزبور Override شده، باز هم متود MakeNoise کلاس Cat فراخوانی خواهد شد.

اما در Shadowing داستان به گونه ای دیگر هستش. وقتی که شما فیلدی از کلاس پدر رو Shadow میکنید، کاربر بیرونی میتونه با Cast کردن Instance ای از کلاس Subclass شده به کلاس پدر، به فیلد Shadow شده دسترسی داشته باشه. در واقع هنگام Shadow کردن شما به کامپایلر میگید که دوست دارید تا فلان بخش از کلاس Base در دسترس کاربر بیرونی قرار بگیره. برای Shadow کردن یک فیلد در C# میتونید از new keyword استفاده کنید.

odiseh
چهارشنبه 15 آبان 1387, 09:49 صبح
وقتی که شما فیلدی از کلاس پدر رو Shadow میکنید، کاربر بیرونی میتونه با Cast کردن Instance ای از کلاس Subclass شده به کلاس پدر، به فیلد Shadow شده دسترسی داشته باشه. در واقع هنگام Shadow کردن شما به کامپایلر میگید که دوست دارید تا فلان بخش از کلاس Base در دسترس کاربر بیرونی قرار بگیره. برای Shadow کردن یک فیلد در C# میتونید از new keyword استفاده کنید.

Mehdi6755
توضیحت انصافا عالی بود. ممنون. ولی اگه میشه بگو پس اصلا فلسفه تولید مفهوم Shadowing در دات نت چیه؟

بازم تشکر از توجهت

mehdi.mousavi
چهارشنبه 15 آبان 1387, 14:37 عصر
Mehdi6755
توضیحت انصافا عالی بود. ممنون. ولی اگه میشه بگو پس اصلا فلسفه تولید مفهوم Shadowing در دات نت چیه؟ بازم تشکر از توجهت

خواهش میکنم. در مورد فلسفه وجودی این مفهوم، راستش چیزی نمیدونستم. تا اینکه گشتم و روی وب به سوالی مشابه سوال شما که Dino Esposito مطرح کرده بود، رسیدم. پاسخهای قشنگی در مورد استفاده عملی این مفهوم توسط مردم به ایشون داده شده، که از آوردن مجددشون اینجا خودداری میکنم. شما میتونید این مطالب رو اینجا بخونید (http://weblogs.asp.net/despos/archive/2004/03/10/86995.aspx).