malaikuangren

What is the purpose or drive to build thing like (xxx),How can it achieve the original goal of design?
抽象方法,虚方法,重载new或overload基类方法的机制

定义

1. 虚方法必须有实现部分,并为派生类提供了覆盖该方法的选项 抽象方法没有提供实现部分,抽象方法是一种强制派生类覆盖的方法,否则派生类将不能被实例化

2. 抽象方法只能在抽象类中声明, 抽象方法必须在派生类中重写 虚方法不是 也不必要重写。其实如果类包含抽象方法,那么该类也是抽象的,也必须声明为抽象的。
3. 抽象方法必须在派生类中重写,这一点跟接口类似,虚方法不必。抽象方法不能声明方法实体 而虚方法可以包含抽象方法的类不能实例化 ,而包含虚方法的类可以实例化. 

4.子类使用了new关键字屏蔽父类的方法,则调用谁的方法由“定义时的类型决定”;二、子类使用override关键字重写父类方法,则调用谁的方法由”运行时引用真实的对象决定。

 

以下的例子能说明虚方法和重载方法的运行结果不一样。

using System; 

abstract public class contact 


public virtual string prinf() 

return ("这是虚方法"); 



public class class1:contact 

public string prinf() 

return ("这是新的方法");//但这会出现编译警告,因为已经从contact那继承了一个同名方法 


想要通过编译,只需将prinf的声明改为 
public override string prinf() 
或 
public new string prinf() 
但是这两种声明方式是有区别的, 
请看下面的例子: 
using System; 

abstract public class contact 

public virtual string prinf() 

return ("这是虚方法"); 



public class class1:contact 

public override string prinf() 

return ("这是新的方法"); 


public class class2:contact 

public new string prinf() 

return ("这是另一个新的方法"); 


public class text 

public static void Main() 

contact [] contacts=new contact [2]; 
contacts[0]=new class1; 
contacts[1]=new class2; 
foreach(contact ct in contacts) 

Console.WriteLine(ct.printf); 




最后我们看到的结果是 

这是新的方法 
这是虚方法  

 

posted on 2012-04-11 11:24  malaikuangren  阅读(271)  评论(0编辑  收藏  举报