¡¡¡¡ÔÚC#ÖÐʵÏÖÖØÐ´·½·¨£¬¿ÉÒÔÓÃnewºÍoverrideÁ½¸ö¹Ø¼ü×ÖÀ´ÊµÏÖ£¬¾¿¾¹ËûÃÇÖ®¼äÓÐÊ²Ã´Çø±ðÄØ£¿ÏÂÃæ£¬ÎÒÒÔÀý×ÓÀ´ËµÃ÷ËûÃÇÖ®¼äµÄ΢ÃîÇø±ð£º
public class GrandClass//»ùÀà
{
public GrandClass()
{
Console.WriteLine("In GrandClass.Constructor");
}
public virtual void Method()//ÓÃvirtual²Å¿ÉÒÔÔÚ×ÓÀàÖÐÓÃoverride,¶ønew²»ÐèÒªÕâÑù
{
Console.WriteLine("In GrandClass.Method()");
}
}
public class ParentClass:GrandClass//¼Ì³Ð»ùÀà,¿´¿´override״̬
{
public ParentClass()
{
Console.WriteLine("In ParentClass.Constructor");
}
public override void Method()//ʹÓÃoverride,ÊÇ˵°Ñ»ùÀàµÄ·½·¨ÖØÐ¶¨Òå
{
Console.WriteLine("In ParentClass.Method() use override");
}
}
public class NewParentClass:GrandClass//¼Ì³Ð»ùÀà,¿´¿´new״̬
{
public NewParentClass()
{
Console.WriteLine("In NewParentClass.Constructor");
}
new public void Method()//ʹÓÃnew,²»ÊÇ˵Óõ½»ùÀàµÄ·½·¨,¶øÊÇÖØÐ¶¨ÒåÒ»¸ö×ÓÀà·½·¨,Ö»²»¹ý,·½·¨Ãû³ÆÓë»ùÀàÏàͬ
{
Console.WriteLine("In NewParentClass.Method()");
}
}
¡¡¡¡ÏÂÃæµÄµ÷ÓôúÂë:
static void Main()
{
GrandClass Parent=(GrandClass)new ParentClass();//ÓÃoverride×ÓÀà¼Ó¿òÒ»¸ö»ùÀà¶ÔÏó¾ä±ú
Parent.Method();
GrandClass NewParent=(GrandClass)new NewParentClass();//ÓÃnew×ÓÀà¼Ó¿òÒ»¸ö»ùÀà¶ÔÏó¾ä±ú
NewParent.Method();
NewParentClass NewParent1=new NewParentClass();//Ò»¸ö×ÓÀà¾ä±ú
NewParent1.Method();
}
¡¡¡¡½á¹ûÊÇÕâÑùµÄ:
[1]In GrandClass.Constructor
[2]In ParentClass.Constructor
[3]In ParentClass.Method() use override
[4]In GrandClass.Constructor
[5]In NewParentClass.Constructor
[6]In GrandClass.Method()
[7]In GrandClass.Constructor
[8]In NewParentClass.Constructor
[9]In NewParentClass.Method()
¡¡¡¡½á¹ûǰµÄÐòºÅÊÇÎÒ×Ô¼º¼ÓµÄ.ΪÁËÒÔϵķÖÎö:
¡¡¡¡[1],[2]Á½¾äÊÇGrandClass Parent=(GrandClass)new ParentClass();µÄ½á¹û.(×¢ÒâÒ»ÏÂ×ÓÀ๹½¨Æ÷Óë»ùÀ๹½¨Æ÷µÄ³õʼ»¯Ë³Ðò)
¡¡¡¡[3]ÊÇParent.Method();½á¹û.
¡¡¡¡[4],[5]Á½¾äÊÇGrandClass NewParent=(GrandClass)new NewParentClass();µÄ½á¹û.
¡¡¡¡[6]ÊÇNewParent.Method();µÄ½á¹û.
¡¡¡¡[7],[8]Á½¾äÊÇGrandClass NewParent1=(GrandClass)new NewParentClass();µÄ½á¹û.
¡¡¡¡[9]ÊÇNewParent1.Method();µÄ½á¹û.
¡¡¡¡ÕâÀïÎÒÃÇ¿ÉÒÔ¿´µ½,ͬÑùÊÇÓÃ×ÓÀàµÄ¶ÔÏó¹¹ÔìÒ»¸ö»ùÀà¾ä±ú.½á¹ûÈ´ºÜÃ÷ÏÔ,¿ÉÒÔ¿´µ½[3]ºÍ[6]µÄÇø±ð.[3]µ÷ÓÃÁË×ÓÀàµÄMethod(),¶ø[6]µ÷ÓÃÁË»ùÀàµÄMethod().
¡¡¡¡Õâ˵Ã÷,override¿ÉÒÔ¸²¸Ç»ùÀàµÄ·½·¨,ÈûùÀàµÄ·½·¨ÒÔ×ÓÀàµÄÄÚÈÝʵÏÖ,¶ønew²»ÓÃÀ´¸²¸Ç»ùÀàµÄ·½·¨,¶øÊÇȫж¨ÒåÒ»¸ö×ÓÀàµÄ·½·¨,Õâ¸ö·½·¨Ö»ÊôÓÚ×ÓÀà,Óë»ùÀàµÄ·½·¨ÎÞ¹Ø,Ö»ÊÇÃû×ÖÉÏÏàͬ¶øÒÑ.
¶øÕâÒ»Àý×ӵĻù´¡Êǽ¨Á¢ÔÚÓÃ×ÓÀà¶ÔÏó¼Ó¿ò³É»ùÀà¶ÔÏóµÄ,Ä¿µÄÊÇʵÏÖÓûùÀà¾ä±úµ÷ÓÃ×ÓÀà·½·¨,ÒÔʵÏÖÖØÔØµÄ¶àÐÎÐÔ.
¡¡¡¡Èç¹ûÏëµ÷ÓÃ×ÓÀàµÄnew·½·¨,ÓÃ×ÓÀàµÄ¾ä±ú(¾ø¶Ô²»ÄÜÓûùÀà¾ä±ú)À´µ÷ÓÃ.½á¹û[9]¿ÉÒÔ¿´³öÀ´.
¡¡¡¡ÓÃnewÊÇÔÚΪ×ÓÀඨÒå·½·¨Ãûʱ,ʵÔÚûÓа취¶¨Òå·½·¨ÃûµÄÇé¿ö²ÅÓë»ùÀàµÄ·½·¨Ïàͬ,µ«Õâ¸ö·½·¨Ö»ÔÚ×ÓÀàÖÐÆðµ½×÷ÓÃ,¶ø²»Ó°Ïì»ùÀàµÄ·½·¨.Ò²¾ÍÊÇ˵,new·½·¨¾ÍÊÇ×ÓÀàж¨ÒåµÄ·½·¨.ÓÃoverrideÊÇÖ±ÕýÒâÒåÉϵÄÖØÔØ.