منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب
الفرق بين التعريف باستخدام overridde و new - نسخة قابلة للطباعة

+- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb)
+-- قسم : قسم لغة السي شارب C#.NET (http://vb4arb.com/vb/forumdisplay.php?fid=175)
+--- قسم : قسم مقالات C#.NET (http://vb4arb.com/vb/forumdisplay.php?fid=177)
+--- الموضوع : الفرق بين التعريف باستخدام overridde و new (/showthread.php?tid=5603)



الفرق بين التعريف باستخدام overridde و new - RaggiTech - 14-10-12

كاتب الموضوع : أحمد جمال

بسم الله الرحمن الرحيم .
السلام عليكم ورحمة الله وبركاته .


من المبادئ العامة في ال OOP استخدام مفهوم ال override ، في برامجك من خلال .net يمكنك تحديد الدالة لتكون قابلة لعمل override لها لاحقاً بالشكل التالي :
C#:

كود :
public class Base
{
public virtual void SomeMethod()
{
}
}

vb.net:

كود :
Public Class Base
Public Overridable Sub SomeMethod()
End Sub
End Class

ومن ثم لعمل override لهذه الدالة في فئة Class آخر نقوم بكتابة الكود التالي :
C#:

كود :
public class Derived : Base
{
public override void SomeMethod()
{
}
}

vb.net:

كود :
Public Class Derived
Inherits Base
Public Overloads Overrides Sub SomeMethod()
End Sub
End Class

في هذه الحالة لو قمنا بتعريف نسخة من الفئة الأولى Base وقمنا بعملها من النوع Derived فسيتم تنفيذ الدالة الموجودة في Derived مباشرة :
C#:

كود :
Base b = new Derived();
b.SomeMethod();


vb.net:

كود :
Dim b As Base = New Derived()
b.SomeMethod()


التعريف باستخدام new أو Shadows :

اما لو قمنا بتعريف ال override باستخدام new أو Shadows في vb.net فكل ما سيحدث هو عملية اخفاء مؤقت hide ، لذا فإن الأمر التالي مثلاً :
C#:

كود :
[FONT=Tahoma]public class Base
{
public virtual void SomeOtherMethod()
{
}
}[/FONT]
[FONT=Tahoma]public class Derived : Base
{
public new void SomeOtherMethod()
{
}
}[/FONT]

[FONT=Tahoma]Base b = new Derived();
Derived d = new Derived();
b.SomeOtherMethod();
d.SomeOtherMethod();[/FONT]


vb.net:

كود :
[FONT=Tahoma]Public Class Base
Public Overridable Sub SomeOtherMethod()
End Sub
End Class [/FONT]
[FONT=Tahoma]Public Class Derived
Inherits Base
Public Shadows Sub SomeOtherMethod()
End Sub
End Class [/FONT]
[FONT=Tahoma]Dim b As Base = New Derived()
Dim d As New Derived()
b.SomeOtherMethod()
d.SomeOtherMethod() [/FONT]


سوف يقوم باستدعاء الدالة الأولى في السطر الثالث ، فيما يقوم باستدعاء الدالة الثانية فقط في السطر الرابع .

المصدر :
http://blogs.msdn.com/csharpfaq/archive/2004/03/12/88453.aspx