请问基类中的虚方法到底有什么作用?
来源:互联网 发布:皇家软件北京赛车 编辑:程序博客网 时间:2024/04/29 07:07
请问基类中的虚方法到底有什么作用?
2007-04-25 14:57:37| 分类:.NET/C# | 标签:|字号大中小 订阅
只有基类的方法加上关键字virtual后才可以被override,从而实现面向对象最重要的特征--多态性,即基类可以使用派生类的方法.
C#中指出:普通的方法重载:指的是类中两个以上的方法(包括隐藏的,继承而来的方法)取的名字相同,只要使用的参数类型或者参数个数不同,编译器便知道在何种情况下应该调用哪个方法。
而在派生类中重新定义此虚函数时要求的是:方法名称、返回值类型、参数表中的参数个数、类型、顺序都必须与基类中的虚函数完全一致。
简单一点说就是子类中override的方法能够覆盖积累中的virtual方法,当你把一个子类的实例转换为基类时,调用该方法时还是调用的子类的override的方法。
一个类里面两个名字一样的函数叫“重载”,基类和继承类里面名字一样的函数叫“重写”,重写就必须使用虚函数。
只有基类的方法加上关键字virtual后才可以被派生类override,从而实现面向对象最重要的特征--多态性,即基类可以使用派生类的方法
父類中的方法重載,提供了某行為的不同實現方法(傳入不同的參數);
在子類中對父類相應方法的重載﹐可以這樣理解(但實際編譯過程不是這樣)﹐子類完全copy父類代碼后﹐把重載(override)的那部分代碼挖去并用子類新的代碼補上。如果子類沒有重載(沒使用override關鍵字)而有和父類完全一樣的方法,可以這樣理解﹐子類并沒有挖去代碼﹐只是簡單覆蓋﹐當要使用繼承來的代碼時﹐只需要類型轉換就可以把覆蓋的代碼浮現出來。
比如:
class A{
public virtual void MA(string s)
{Console.WriteLine("class A:" + s);}
public virtual void MA(int i)
{Console.WriteLine("class A:" + i.ToString());}
}
class B:A{
public override void MA(string s) //完全取代父類代碼
{Console.WriteLine("class B:" + s);}
public new void MA(int i) //暫時覆蓋父類代碼
{Console.WriteLine("class B:" + i.ToString());}
}
void Main(){
B b=new B();
A a=(B)b; //convert B-->A
a.MA("li");
a.MA(100);}
output:
class B:li
class A:100
- 请问基类中的虚方法到底有什么作用?
- volalite到底有什么作用?
- css 中的background:transparent到底是什么意思有什么作用
- css 中的background:transparent到底是什么意思有什么作用
- css 中的background:transparent到底是什么意思有什么作用
- 请问主板上元器件有什么作用
- java中的静态方法有什么作用?
- MFC42.#823函数到底有什么作用
- JNDI到底是什么,有什么作用
- JNDI到底是什么,有什么作用
- JNDI到底是什么,有什么作用
- JAVA接口到底有什么作用
- JNDI到底是什么,有什么作用
- JNDI到底是什么,有什么作用
- JNDI到底是什么,有什么作用
- JNDI到底是什么,有什么作用
- 电脑的bios到底有什么作用
- JNDI到底是什么,有什么作用
- Objective-C的self.用法的一些总结
- android数据存储与访问之使用pull解析器
- 你的标签,是什么?(转自:一直特立独行的猫)
- VSFTP安装与配置
- android数据存储与访问之使用SharedPreferences
- 请问基类中的虚方法到底有什么作用?
- 转载CString TO char* 解决办法
- Make bat look like txt file(使批文件看起来像文本文件)
- 再好的工作也有400次想辞职
- 工程师的选择
- Spring学习笔记 关于Bean属性的初始化
- 苦逼了就辞职弃学去旅行?
- 自己选择的路,跪着也要往下走……
- 5月15日到6月15日工作总结