PDA

View Full Version : حرفه ای: private کردن متد یک کلاس



hojjatshariffam
دوشنبه 04 مرداد 1389, 11:08 صبح
با عرض ادب خدمت دوستان حرفه ای خودم
من می خوام یک متدی که توی یک کلاس بصورت public تعریف شده رو بعد از ارث بری بصورت private کنم
یه مثال می زنم که بیشتر واضح تر بشه

مثلا متد ShowDialog در یک فرم بصورت public تعریف شده
من میخوام یک کلاس درست کنم که از فرم ارث ببره و توش متد showdialog رو کاری بکنم که Private بشه . Override کردم ولی اجازه نمی ده که Private بشه
یعنی می خوام بعد از اینکه یک آبجکت از این کلاس ارث برده شده از فرم رو تعرف کردم دیگه متد Showdialog نداشته باشه
امکانش هست اصلا ؟

توضیح : می دونم که اگه تو یه کلاسی از protected استفاده کنم این کار انجام میشه ولی کلاس پایه رو من تعریف نکردم(مثلا) برای همین قبلا پابلیک تعریف شده .
من یه راه حل می خوام که متد پابلیک رو پرایویت کنم

jalalx
دوشنبه 04 مرداد 1389, 12:23 عصر
شما نمی توانید یک متد public رو مخفی کنید. ولی می تونید اونو از کار بندازید به این شکل:


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

new public void Foo()
{
throw new NotImplementedException();
}
}

public class Parent
{
public void Foo()
{
// Foo Operation...
}
}

public class Child
{
public static void Main()
{
Modifier m = new Modifier();
m.Foo(); // Throw exception
}
}

karim_medusa
دوشنبه 04 مرداد 1389, 12:46 عصر
یک روش دیگه هم به این صورت که در صورت استفاده اجازه کامپایل هم نمیده.



[Obsolete("You canot use this method",true)]
public new DialogResult ShowDialog()
{
return DialogResult.None;
}

[Obsolete("You canot use this method",true)]
public new DialogResult ShowDialog(IWin32Window owner)
{
return DialogResult.None;
}

Saeed.Masoumi
دوشنبه 04 مرداد 1389, 14:51 عصر
سلام
اینجا (http://bytes.com/topic/c-sharp/answers/260984-changing-access-modifier-levels-derived-class)رو همیک نگاه بندازین

hojjatshariffam
سه شنبه 05 مرداد 1389, 13:15 عصر
پراپرتی های یک کلاس چی؟
اونارو میشه پرایویت کرد یا قضیه مثل متداست؟

اَرژنگ
سه شنبه 05 مرداد 1389, 13:49 عصر
پراپرتی های یک کلاس چی؟
اونارو میشه پرایویت کرد یا قضیه مثل متداست؟
در برنامه نویسی یک اصلی هست به نام LSP، اگر اصولی برنامه‌نویسی بشد جواب این سوالهایی که پرسیدید باید خیر باشد.
مشکلی که با این سوالها میخواهید حل کنید چیه؟ اگر طراحی درست باشد نباید در کلاسهایه فرزند خصوصیت و یا متدی از کلاس والد مخفی بشد.