PDA

View Full Version : آموزش: حرف کشیدن از یه کلاس



jalalx
دوشنبه 04 مرداد 1389, 11:00 صبح
سلام خدمت دوست داران برنامه نویسی شیء گرا!

می خوام یه روش که قبلا به دردم خورد رو معرفی می کنم. نمی دونم اسم این Design Pattern چیه! اخه بر حسب نیاز کشفش کردم!!!

برای حرف کشیدن از این کلاس باید دو شرط زیر بر قرار باشه!


کلاس مورد نظر از نوع sealed نباشه تا بشه ازش به ارث برد.
تابع یا مشخصه (یا هر عضو مورد نظر ما) باید به صورت protected باشه.

خوب فرض کنید ما یه کلاس داریم به این شکل و می خوایم به متد Foo دسترسی پیدا کنیم.




public class Parent
{
protected void Foo()
{
Console.WriteLine("This is a sectet message!");
}
}

مسلمه اگه ما یک شیء از این کلاس درست کنیم دستمون به Foo نمی رسه!



class Program
{
static void Main()
{
Parent p = new Parent();
p.Foo(); // Error!
}
}


واسه همین این کار ها رو می کنیم:


ابتدا یه کلاس کمکی درست می کنیم و از کلاس Parent به ازث می بریم.
توش یه تابع (یا Property یا هر عضو دیگری) رو به صورت عمومی تعریف می کنیم.
توی این تابع تعریف شده (یا عضو تعریف شده) اون تابع پدر که از نوع protected است رو فراخوانی می کنیم.

مثل این:



public class Modifier : Parent
{
public Modifier()
: base()
{
}

public void CallFoo()
{
Console.Write("Message is:");
base.Foo();
}
}

حالا وقت حرف کشیدنه!



class Program
{
static void Main()
{
//Parent p = new Parent();
//p.Foo(); // Error!

Modifier modifier = new Modifier();

// Now Talk!!!
modifier.CallFoo();
}
}

امیدوارم به دردتون بخوره!!!

اَرژنگ
چهارشنبه 13 مرداد 1389, 07:41 صبح
سلام خدمت دوست داران برنامه نویسی شیء گرا!

می خوام یه روش که قبلا به دردم خورد رو معرفی می کنم. نمی دونم اسم این Design Pattern چیه! اخه بر حسب نیاز کشفش کردم!!!

برای حرف کشیدن از این کلاس باید دو شرط زیر بر قرار باشه!


کلاس مورد نظر از نوع sealed نباشه تا بشه ازش به ارث برد.
تابع یا مشخصه (یا هر عضو مورد نظر ما) باید به صورت protected باشه.



به این Design Pattern گفته نمیشه، اگر از اول Design درست باشد احتیاجی به این کار نیست.
دلیل اینکه چرا چنین چیزی از پایه خراب است :
تنها زمانی از این روش استفاده میشه که عضو کلاس پایه از کلاسهایه دیگر نیاز به دسترسی است و اشتباهاً پروتکتد تعریف شده، حالا روش درست پابلیک کردن عضو مورد نظر در کلاس ابوی است. زمانهایی که قابلیت چنین کاری نیست با این کلک که در بعضی از زبانها میشه استفاده کرد باید متوصل شد، ولی حقیقت طراحی اشتباه است که باید درست بشد نه اعمال چنین روشهایی.