您的位置:首页 > 其它

由虚方法谈到实例在编译和运行时的类型

2009-01-02 15:36 204 查看
今天想温故而知新,想更彻底的了解下虚方法,估计大多数人跟我一样对虚方法很多的认识仅在于---------------------方法名前有virtual修饰的就被称为虚方法,无virtual修饰的方法称为非虚方法.

虚方法与非虚方法有啥区别呢?其实很关键的一点就是-----------------------在一个虚拟方法调用中,该调用所涉及的那个实例的运行时类型确定了要被调用的究竟是该方法的哪一个实现。在非虚拟方法调用中,相关的实例的编译时类型是决定性因素。

那么实例在编译和运行时的类型分别是什么呢?eg A a= new B();____A,B都为一个类.那么a实例在编译时候的类型就是A,而运行时候的类型就为B.

Eg:

using System;
class A
{
public void F() { Console.WriteLine("A.F"); }
public virtual void G() { Console.WriteLine("A.G"); }
}
class B: A
{
new public void F() { Console.WriteLine("B.F"); }
public override void G() { Console.WriteLine("B.G"); }
}
class Test
{
static void Main() {
B b = new B();
A a = b;
a.F();
b.F();
a.G();
b.G();
}
}
那么输出结果就是A.F B.F B.G B.G
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐