C# virtual,override,new 整理】的更多相关文章

今天仔细学习了一下C#中virtual, override, new关键字,参考了网上的很多资料,现整理一下. Virtual: virtual 关键字用于修饰方法.属性.索引器或事件声明,并使它们可以在派生类中被重写.默认情况下,方法是非虚拟的.不能重写非虚方法.virtual 修饰符不能与 static.abstract, private 或 override 修饰符一起使用. Override: override 方法提供从基类继承的成员的新实现.由 override 声明重写的方法称为重…
一直以来我都对 virtual  override 和 new 之间的区别感到疑惑不解. 特别笔试的时候特别容易考到,真的很容易弄错啊,畜生! 光看理论永远记不住,那不如写几行代码就懂了. 首先看看virtual  override实现什么效果: class A { public virtual void say() { Console.WriteLine("A"); } } class B :A { public override void say() { Console.Write…
Public:公开权限 Private:修饰类时类为程序集或者包含此类的类内部权限:修饰变量时只能类内部使用: Protected:修饰变量,只能继承类可以使用,对外(包括继承类的实例)无权限: Abstract:定义类时此类不能实例化,只能被继承,如果类内部有抽象方法,则此类只能时抽象类,而且其继承者必须实现该类抽象方法(实现时加override). Sealed:封装类,与Protected相反,封装类不能被继承,且不能有虚方法和抽象方法.Sealed修饰的方法不能重写. Virtual/O…
If a class has at least one member which modified by "abstract",this class is an abstract class and you have to modify this class using keyword "abstract", while the member is called "abstract member"(say,abstract method or a…
internal 声明类.类成员.接口或接口成员具有内部可见性. internal 修饰符使类.接口或成员仅在当前包中可见. 当前包之外的代码不能访问 internal 成员.只有在同一程序集的文件中,内部类型或成员才是可访问的 在全局范围内,internal 修饰符与 public 修饰符相同. 不能将 internal 修饰符与其他任何可见性修饰符(public.private 或 protected)组合. 可见性修饰符相对于它们的定义范围. sealed 当对一个类应用 sealed 修…
很奇怪的设计,需要靠着两个Keyword共同作用,才能完成多态——而不是类似Java那样的默认多态.所谓共同作用,即基类使用virtual 标示函数,子类使用override显示重写. 有点奇怪,MSDN说了一大堆情境,但我仍然认为增加了多义性与复杂性. class MainClass     {         public static void Main (string[] args)         {                      var s1 = new Student …
virtual:声明虚方法.可以被其派生类所重写的.重写方法需要使用override或者new关键字. override:覆盖原方法.可对重写virtual.override.abstract进行重写 new:隐藏原方法.可以对virtual.override.new进行重写  .用于创建对象,分配内存空间 不能和static.因为static是运行时只加载一次,在内存中有唯一地址的,不能被重写或继承 abstract:可以对类和方法进行抽象. 在抽象类中声明抽象方法.没有具体的实现.抽象方法必…
1.如果父类方法没有加virtual关键字,即不是一个虚方法,则在子类中只能隐藏基类方法,而不能覆盖. 2.如果父类方法加了virtual关键字,即它是一个虚方法,在子类中一样可以隐藏. 3.如果子类实现了父类相同的方法(相同的方法名称及签名),而没有new,在编译时会报警,但编译仍然能够通过! 4.调用父类方法:base.方法名() 5.abstract类是一个抽象类,不能被实例化 new 和override的区别 1.override重写虚方法,那么就只剩下重写以后的方法; 2.new隐藏基…
abstract :表示方法是抽象方法,在子类中必须重写.抽象方法所在的类必须是抽象类,即用abstract modifiers:virtual:表示此方法是virtual方法,除了在子类中可以重写外(在子类中也可直接使用),和普通方法完全一样:override:表示重写父类的virtual方法:new: 显式隐藏从基类继承的成员: 区别: virtual:标记方法为虚方法1.可在派生类中以override覆盖此方法2.不覆盖也可由对象调用3.无此标记的方法(也无其他标记),重写时需用new隐藏…
1.abstract 可以修饰类和方法,修饰方法时只声明不实现: 2.继承实现abstract类必须通过override实现abstract声明的方法,而virtual方法可选择override(重写)实现: 3.…