C#中的virtual、override

C# 是面向对象的程序设计语言,每一个函数都属于一个类。

当一个方法被声明为Static时,这个方法是一个静态方法,编译器会在编译时保留这个方 法的实现。也就是说,这个方法属于类,但是不属于任何成员,不管这个类的实例是否存在 ,它们都会存在。就像入口函数Static void Main,因为它是静态函数,所以可以直接被调 用。

当一个方法被声明为Virtual时,它是一个虚拟方法,直到你使用ClassName variable = new ClassName();声明一个类的实例之前,它都不存在于真实的内存空间中。这个关键字在 类的继承中非常常用,用来提供类方法的多态性支持。

例如,有一个类Test,Test类拥有两个方法Hello()和greet():

public class test
{
public void Hello()
{
System.Console.WriteLine("hello, world!");
}
.....
}
类TestMe派生自类Test,那么当你使用如下的代码:

Test a = new TestMe();

创建一个TestMe类的新实例后,假如你试图执行如下的代码:

a.Hello();

那么,自然就会运行基类Test的Hello()方法,但是如果你想给予派生类TestMe一个它自 己的Hello()方法,你就要在Test类中将Hello()方法声明为虚拟的:

public virtual void Hello()
{
...
}
然后在派生类中以override关键字表示覆盖基类的方法:

public class TestMe : Test
{
...
public overrice void Hello()
{
System.Console.WriteLine("hello from TestMe class!!!");
}
....
}

这时调用a.Hello(),就会出现“hello from TestMe class!!!”字样, 而不是“Hello,world!”说明基类的方法已经被覆盖了。这就是多态性的表现。

从上面不难看出,一个静态的方法是真实存在的,而一个虚拟方法可以被派生类重写,这 二者是冲突的,其实对于一个方法,C#规定只能使用下面这些限定符中的一个:

override virtual static abstract sealed

代表的含义分别为:

重载函数、虚拟函数、静态函数、抽象函数、密封函数(不可派生)

另外,C#中定义一个方法的声明为:

可见性 类型 返回值 方法名(参数列表){方法体}

例如

public static void Test(int a){System.Console.WriteLine(a.ToString());}

原文地址:http://www.cnblogs.com/mygood/articles/mygood_dome_c.html

这是一个公有的静态函数,函数名为Test,无返回值,有一个整形参数a,作用是把a的值 输出在屏幕上。

时间: 2024-10-02 20:24:20

C#中的virtual、override的相关文章

深入理解C#中new、override、virtual关键字的区别_C#教程

OO思想现在已经在软件开发项目中广泛应用,其中最重要的一个特性就是继承,最近偶简单的复习了下在C#中涉及到继承这个特性时,所需要用到的关键字,其中有一些关键点,特地整理出来,方便大家查阅. 一.在C#中,new这个关键字使用频率非常高,主要有3个功能:    a) 作为运算符用来创建一个对象和调用构造函数. b) 作为修饰符. c) 用于在泛型声明中约束可能用作类型参数的参数的类型. 在本文中,只具体介绍new作为修饰符的作用,在用作修饰符时,new关键字可以在派生类中隐藏基类的方法,也就说在使

在Silverlight 2应用程序中集成Virtual Earth

概述 Virtual Earth是什么,我想不用多做解释了.微软在推出自己的Virtual Earth之后,开放了大量的 APIs,使得我们可以方便集成到自己的应用程序中. 在HTML中集成 在开始之前,我们先来简单看一下如何在HTML中集成Virtual Earth,大家可以去这里查询相关APIs, 我们来看看如何加载默认地图,如下代码所示: <html> <head> <title></title> <meta http-equiv="C

《Effective C++》读书笔记09:绝不在构造和析构过程中调用virtual函数

首先明确一下,对于一个继承体系,构造函数是从基类开始调用了,而析构函数则正 好相反,从最外层的类开始. 对于在构造函数中调用virtual函数,先举个例子: 1 class Transaction //所有交易的基类 2 { 3 public: 4 Transaction(); 5 virtual void logTransaction() const = 0;//日志记 录,因交易类型的不同而有不同的记录 6 } 7 8 Transaction::Transaction()//构造函数实现 9

如何修改虚拟机中(Microsoft Virtual PC或VMware)的bios

修改Virtual PC虚拟机BIOS Microsoft Virtual PC,它的优势是内存占用小,与操作系统的兼容性强.通过修改虚拟机BIOS信息中的OEM字符,这样就可以安装OEM版本的Windows XP实现免激活了. 1. 需要准备的工具软件 为了修改虚拟机的BIOS信息,我们需要准备好如下工具软件: (1)Microsoft Virtual PC 2004:安装SP1补丁包后版本号为5.3.582.27. (2)ResScope:这是一个类似于eXeScope的软件资源分析和编辑工

浅谈C#中new、override、virtual关键字的区别

OO思想现在已经在软件开发项目中广泛应用,其中最重要的一个特性就是继承,最近偶简单的学习了下在设计模式中涉及到继承这个特性时,所需要用到的关键字,其中有一些关键点,特地整理出来.     一.New     在C#中,new这个关键字使用频率非常高,主要有3个功能:         a)   作为运算符用来创建一个对象和调用构造函数.     b)   作为修饰符.     c)   用于在泛型声明中约束可能用作类型参数的参数的类型.     在本文中,只具体介绍new作为修饰符的作用,在用作修

C# [method Modifiers] abstract virtual override new

abstract :表示方法是抽象方法,在子类中必须重写.抽象方法所在的类必须是抽象类,即用abstract modifiers:virtual:表示此方法是virtual方法,除了在子类中可以重写外(在子类中也可直接使用),和普通方法完全一样:override:表示重写父类的virtual方法:new: 显式隐藏从基类继承的成员: 区别: virtual:标记方法为虚方法1.可在派生类中以override覆盖此方法2.不覆盖也可由对象调用3.无此标记的方法(也无其他标记),重写时需用new隐藏

new,virtual,override,interface,delegate,event-------------C#——方法实现总结

C#--方法实现总结 本文分两部分来写,第一部分:C#方法实现的理解与问题,第二部分:C#中方法实现的种类. 第一部分:C#方法实现的理解与问题 理解: 1. 使用virtual和override关键字,在基类和派生类中用同样的方法签名实现不同的方法 2.  使用interface接口,在不同的类中,用相同的方法签名实现不同的方法 3.  用委托delegate,把不同类中的方法集合在一起,然后一起调用,完成某种综合的功能 4.  使用事件,完成跟委托一样的功能 以上四条全都说明了面向对象的多态

Windows Server 2008中WDS Virtual Labs的注意事项

广大 ITPro 都相继开展了 Windows Server 2008 相关的评估和测试,有些条件好的直接建立了试验室或在生产环境小规模测试,而有些则创建了 Virtual Labs. 我想很多人与我一样都会选择后者,因为不需要在物理设备间进行频繁的切换,而且系统的部署也是相当耗费时间,除非对实际性能指标有很高的要求,否则 Virtual Labs 绝对是首选!毕竟现在配置 4G 内存的 PC 或 NoteBook 比比皆是,本人的 Virtual Labs 就是在 X60 上完成的. 早先一直

认识Windows7中的Virtual PC

想必很多朋友都听说过了Windows 7当中的XP Mode,其实这个XP Mode就是跑在Win7中的一个虚拟机. 而这个虚拟机不是Microsoft Virtual PC 2007,是微软全新开发的一个虚拟化平台.微软的Windows Virtual PC评估指南中已经明确的定义了:Windows? Virtual PC is a new optional component for the Windows 7 operating system that you can use to eva