当前位置: 移动技术网 > IT编程>开发语言>c# > 深入理解C# abstract和virtual关键字

深入理解C# abstract和virtual关键字

2019年07月18日  | 移动技术网IT编程  | 我要评论
复制代码 代码如下: class a { public virtual void func() // 注意virtual,表明这是一个虚拟函数 { console.writ
复制代码 代码如下:

class a
{
public virtual void func() // 注意virtual,表明这是一个虚拟函数
{
console.writeline("func in a");
}
}
class b : a // 注意b是从a类继承,所以a是父类,b是子类
{
public override void func() // 注意override ,表明重新实现了虚函数
{
console.writeline("func in b");
}
}
class c : b // 注意c是从b类继承,所以b是父类,c是子类
{
}
class d : a // 注意d是从a类继承,所以a是父类,d是子类
{
public new void func() // 注意new ,表明覆盖父类里的同名类,而不是重新实现
{
console.writeline("func in d");
}
}
class program
{
static void main(string[] args)
{
a a; // 定义一个a这个a类的对象.这个a就是a的申明类
a b; // 定义一个b这个a类的对象.这个a就是b的申明类
a c; // 定义一个c这个a类的对象.这个a就是c的申明类
a d; // 定义一个d这个a类的对象.这个a就是d的申明类
a = new a(); // 实例化a对象,a是a的实例类
b = new b(); // 实例化b对象,b是b的实例类
c = new c(); // 实例化c对象,c是c的实例类
d = new d(); // 实例化d对象,d是d的实例类
a.func(); // 执行a.func:1.先检查申明类a 2.检查到是虚拟方法 3.转去检查实例类a,就为本身 4.执行实例类a中的方法 5.输出结果 func in a
b.func(); // 执行b.func:1.先检查申明类a 2.检查到是虚拟方法 3.转去检查实例类b,有重载的 4.执行实例类b中的方法 5.输出结果 func in b
c.func(); // 执行c.func:1.先检查申明类a 2.检查到是虚拟方法 3.转去检查实例类c,无重载的 4.转去检查类c的父类b,有重载的 5.执行父类b中的func方法 5.输出结果 func in b
d.func(); // 执行d.func:1.先检查申明类a 2.检查到是虚拟方法 3.转去检查实例类d,无重载的(这个地方要注意了,虽然d里有实现func(),但没有使用override关键字,所以不会被认为是重载) 4.转去检查类d的父类a,就为本身 5.执行父类a中的func方法 5.输出结果 func in a
d d1 = new d();
d1.func(); // 执行d类里的func(),输出结果 func in d
console.readline();
}
}

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网