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

 更新时间:2011年06月27日 20:00:21   作者:  
深入理解C# abstract和virtual关键字,学习c#的朋友可以参考下。
复制代码 代码如下:

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();
}
}

相关文章

  • C#加解密之AES算法的实现

    C#加解密之AES算法的实现

    一般我们来说呢,对于加密,我们分为可逆和不可逆。可逆加密又可分为对称加密(AES、DES等)和非对称加密(RSA),还有就是一些编码加密等(BASE64);不可逆的呢,大部分又都称为摘要算法(MD5、SHA)。本文将用C#实现AES算法,需要的可以参考一下
    2022-08-08
  • 基于WPF实现面包屑控件的示例代码

    基于WPF实现面包屑控件的示例代码

    这篇文章主要为大家详细介绍了如何基于WPF实现简单的面包屑控件,文中的示例代码讲解详细,对我们学习或工作有一定帮助,感兴趣的小伙伴可以了解一下
    2023-05-05
  • C#继承IList 接口的实现步骤

    C#继承IList 接口的实现步骤

    C#中的IList<T>接口是.NET框架中的一种通用接口,它定义了一组在运行时可以使用类型参数T的元素的集合,本文给大家介绍了C#继承IList 接口的设计方法,文中通过代码示例给大家介绍的非常详细,需要的朋友可以参考下
    2024-02-02
  • C#中异步是4种实现方式详解

    C#中异步是4种实现方式详解

    这篇文章主要为大家详细介绍了C#中异步实现方式的相关知识,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以跟随小编一起学习一下
    2024-03-03
  • C#几种获取网页源文件代码的实例

    C#几种获取网页源文件代码的实例

    C#几种获取网页源文件代码的实例,需要的朋友可以参考一下
    2013-04-04
  • C# WPF ListBox 动态显示图片功能

    C# WPF ListBox 动态显示图片功能

    这篇文章主要介绍了C# WPF ListBox 动态显示图片,处理过程分为前台代码和后台代码,本文结合实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2023-08-08
  • C#创建Windows服务的实现方法

    C#创建Windows服务的实现方法

    这篇文章主要介绍了C#创建Windows服务的实现方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-03-03
  • C#对XmlHelper帮助类操作Xml文档的通用方法汇总

    C#对XmlHelper帮助类操作Xml文档的通用方法汇总

    该篇文章主要总结的是自己平时工作中使用频率比较高的Xml文档操作的一些常用方法和收集网上写的比较好的一些通用Xml文档操作的方法,对C# XmlHelper帮助类操作Xml文档相关知识感兴趣的朋友一起看看吧
    2022-03-03
  • C#中正则表达式的3种匹配模式

    C#中正则表达式的3种匹配模式

    本文主要介绍在C#中正则匹配的三种模式:单行模式(Singleline)、多行模式(Multiline)与忽略大小写(IgnoreCase),希望能帮到大家。
    2016-05-05
  • C#和SQL实现的字符串相似度计算代码分享

    C#和SQL实现的字符串相似度计算代码分享

    这篇文章主要介绍了C#和SQL实现的字符串相似度计算代码分享,本文分别给出了C#语言和SQL语言的实现代码,需要的朋友可以参考下
    2014-10-10

最新评论