黑马程序员技术交流社区

标题: C#中所有的方法都是虚方法吗? [打印本页]

作者: hongiqnglik    时间: 2013-8-5 21:27
标题: C#中所有的方法都是虚方法吗?
C#中所有的方法都是虚方法吗?
作者: 范国伟    时间: 2013-8-5 21:46
当然不是,用virtual关键字定义的方法才是虚方法,子类重写虚方法的时候用override关键字 比如下面这段代码
public class cpu
{   
  public virtual void print()    //这个就是虚方法
  {
Console.WriteLine("我是CPU");

   }      
}  
public class IntelCpu:cpu
{     
public override void  print()    //这个就是虚方法的重写
{         
Console.WriteLine("我是INTEL CPU");  
   }
}
而一般的不加virtual 关键字的方法就不是虚方法。

希望对你有帮助
作者: sxdxgzr@126.com    时间: 2013-8-5 21:50
.net默认的方法都是非虚方法,只有用virtual修饰的方法才为虚方法。
作者: 孔健    时间: 2013-8-6 15:52
不是的,有virtual修饰的方法才是虚方法,虚方法需要在其派生类中重写override.
建议看一下这篇文章:虚方法的重写http://blog.csdn.net/kj297296053/article/details/8213550
作者: O_o”    时间: 2013-8-6 22:27
还有抽象方法,两者是有区别的。我也只知道这些- -
作者: 高文咪    时间: 2013-8-7 14:39
并不是所有的方法都是虚方法;当子类需要重写父类方法的时候,就需要它是虚方法,当有N个子类重写了父类方法就有N种实现,从而实现了多态;
当类中的方法声明前加上“virtual”修饰符时,我们称之为虚方法。使用了virtual修饰符后,不允许再有static,abstract或override修饰符;
例如:
  1.      public class test
  2.      {
  3.          public virtual void test1
  4.          {
  5.             Console.WriteLine("这是一个虚方法!");
  6.          }
  7.      }例如:
复制代码
这是定义了一个test类,这是个可以让其他对象继承的基类。该类有一个test1()的方法,方法带有virtual修饰符,该修饰符表明:该基类的派生类可以重载该方法。
作者: 宋兴征    时间: 2013-8-7 19:47
“默认情况下,Java中的方法都是虚方法,假如希望方法具有非虚的行为,就必须显式地密封它。相反,C# 的方法默认为非虚方法。” ----摘自 C#本质论  
作者: 落叶秋风    时间: 2013-8-7 20:53
首先什么是虚方法,即对于类的方法,声明时加上virtual修饰符,则成为虚方法,虚方法体现的是多态的思想,为什么会有多态呢?因为父类的对象可以作为子类的对象,子类的对像不能作为父类的对象




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2