C#--virtual,abstract,override,new,sealed修饰符学习
1、参考博客 http://www.cnblogs.com/oneword/archive/2009/07/02/1515279.html
http://www.cnblogs.com/mygood/articles/mygood_dome_c.html
2、总结
(1)
virtual:使用此关键字,可以使其在派生类中被重写.
abstract:抽象方法,由子类重写,或继续为抽象方法存在,并由其子子类实现.
override: 重写父类方法,属性,或事件的抽象实现或虚方法.
new:显式隐藏从父类继承的成员. 子类在重写父类方法时用在方法前用new 直接覆盖隐藏掉父类的方法
(2)当一个方法被声明为Static时,这个方法是一个静态方法,编译器会在编译时保留这个方法的实现。也就是说,这个方法属于类,但是不属于任何成员,不管这个类的实例是否存在,它们都会存在。就像入口函数Static void Main,因为它是静态函数,所以可以直接被调用。
当一个方法被声明为Virtual时,它是一个虚拟方法,直到你使用ClassName variable = new ClassName();声明一个类的实例之前,它都不存在于真实的内存空间中。这个关键字在类的继承中非常常用,用来提供类方法的多态性支持。
(3)C#规定只能使用下面这些限定符中的一个:
override virtual static abstract sealed
重载函数、虚拟函数、静态函数、抽象函数、密封函数(不可派生)
(4)
virtual 关键字用于修改方法或属性的声明,在这种情况下,方法或属性被称作虚拟成员。虚拟成员的实现可由派生类中的重写成员更改。
调用虚方法时,将为重写成员检查该对象的运行时类型。将调用大部分派生类中的该重写成员,如果没有派生类重写该成员,则它可能是原始成员。
默认情况下,方法是非虚拟的。不能重写非虚方法。
public abstract class Animal
{
public abstract void Eat(); public virtual void Sleep()
{
HttpContext.Current.Response.Write("动物正在睡觉!<hr/>");
}
} public class Horse : Animal
{
public override void Eat()
{
HttpContext.Current.Response.Write("马在吃草!<br/>");
} public override void Sleep()
{
HttpContext.Current.Response.Write("马是站着睡觉!<hr/>");
}
} public class Cat : Animal
{
public override void Eat()
{
HttpContext.Current.Response.Write("猫在吃食!<br/>");
} public new void Sleep()
{
HttpContext.Current.Response.Write("猫是趴着睡觉的!<hr/>");
}
}
(4)当sealed修饰方法时,sealed将使您能够允许子类从您的类继承,并防止它们重写特定的虚方法或虚属性
public class Cat
{
public sealed void Eat()
{
HttpContext.Current.Response.Write("猫在吃食!<br/>");
}
} public class LitCat : Cat
{
不能重写eat方法
}
(5) 注意 animal an1=new Horse();
anl.Eat() 仍然调的是子类的重写后的方法即horse的eat方法

C#--virtual,abstract,override,new,sealed修饰符学习的更多相关文章
- C# 中的sealed修饰符学习
转载原地址 http://developer.51cto.com/art/200908/147327.htm C#语言还是比较常见的东西,这里我们主要介绍C# sealed修饰符,包括介绍两个修饰符在 ...
- C#--virtual,abstract,override,new,sealed
virtual:使用此关键字,可以使其在派生类中被重写. abstract:抽象方法,由子类重写,或继续为抽象方法存在,并由其子子类实现. override: 重写父类方法,属性,或事件的抽象实现或虚 ...
- sealed修饰符
sealed(C# 参考) 当对一个类应用 sealed 修饰符时,此修饰符会阻止其他类从该类继承. 在下面的示例中,类 B 从类 A 继承,但是任何类都不能从类 B 继承. class A {} s ...
- sealed 修饰符
当对一个类应用 sealed 修饰符时,此修饰符会阻止其他类从该类继承. 在下面的示例中,类 B 从类 A 继承,但是任何类都不能从类 B 继承. class A {} sealed class B ...
- virtual abstract override new 几点学习
1.Vitual方法和普通方法区别为:继承其的子类可以用override/new在重载此方法,也可以不重载其方法,有方法体(可以写语句),override修饰则调用子类方法2.abstract类中抽象 ...
- c#中sealed修饰符
sealed 修饰符表示密封 用法: 1.用于类时,表示该类不能再被继承,不能和abstract同时使用,因为这两个修饰符在含义上互相排斥 2.用于方法和属性时,表示该方法或属性不能再被重写,必须和o ...
- abstract(抽象)修饰符
abstract(抽象)修饰符,可以修饰类和方法 1,abstract修饰类,会使这个类成为一个抽象类,这个类将不能生成对象实例,但可以做为对象变量声明的类型,也就是编译时类型,抽象类就像当于一类的半 ...
- vue修饰符学习
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- C#多态;父类引用指向子类对象;new和override的区别;new、abstract、virtual、override,sealed关键字区别和使用代码示例;c#类的初始化顺序
关于父类引用指向子类对象 例如: 有以下2个类 public class Father { public int age = 70; public static string name = " ...
随机推荐
- getconf
用途 将系统配置变量值写入标准输出. 语法 getconf [ -v specification ] [ SystemwideConfiguration | PathConfiguration Pat ...
- Ubuntu下Chrome运行Silverlight程序
Ubuntu 14.04.1下运行Terminal,安装Pipelight输入以下命令: sudo add-apt-repository ppa:pipelight/stable sudo apt-g ...
- MVC验证
前言 MVC自己的验证机制,通过一个案例记录学习的成果. 首先,model代码如下: public class Students { [Display(Name = "I ...
- humid vs wet vs moist
想表达天气很潮湿该用哪个词呢? 跟一个美国人聊天,我说wet他没听清,然后我说moist,然后他反应过来了:"oh,humid" 那~还是用humid吧
- wordpress---wp_query的使用方法
wp_query是一个wordpress用于复杂请求的的一个类,看到query懂开发的人就会反应这个是数据库查询的一个类,这个类可谓是非常有用的,可以帮助我们做很多复杂的查询. wp_query的使用 ...
- Scala实现乘法口诀
object Test4 { def main(args: Array[String]) { for (i <- 1 to 9; j <- 1 to 9 if (j <= i ...
- python的十进制与任意进制的转换
将任意进制转换成十进制 ", 8)) # 表示把8进制的54转换成十进制数并输出结果. # 8可以是2.8,10,16等进制数 将十进制转换成任意进制 def f(n,x): #n为待转换的 ...
- JavaEE Servlet 学习笔记
一.Servlet概述 1.什么是Servlet Servlet是一个运行在服务器端的Java小程序,通过HTTP协议用于接收来自客户端请求,并发出响应. 2.Servlet中的方法 public v ...
- linux下面安装coreseek与mmseg
1tar xzvf coreseek-3.2.14.tar.gz2cd mmseg-3.2.14/./configure --prefix=/usr/local/mmseg3 checking for ...
- idea启动java Maven项目,出现" java: 程序包xxxx不存在"
今天运行Maven项目的时候,出现了,Error:(19, 17) java: 程序包tracetool不存在的情况 本人的解决办法: (1)首先确保maven pom文件不能报错,即文件上面不能有 ...