A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© hongiqnglik 中级黑马   /  2013-8-5 21:27  /  1745 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

C#中所有的方法都是虚方法吗?

9 个回复

正序浏览
首先什么是虚方法,即对于类的方法,声明时加上virtual修饰符,则成为虚方法,虚方法体现的是多态的思想,为什么会有多态呢?因为父类的对象可以作为子类的对象,子类的对像不能作为父类的对象
回复 使用道具 举报
“默认情况下,Java中的方法都是虚方法,假如希望方法具有非虚的行为,就必须显式地密封它。相反,C# 的方法默认为非虚方法。” ----摘自 C#本质论  
回复 使用道具 举报
并不是所有的方法都是虚方法;当子类需要重写父类方法的时候,就需要它是虚方法,当有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修饰符,该修饰符表明:该基类的派生类可以重载该方法。
回复 使用道具 举报
还有抽象方法,两者是有区别的。我也只知道这些- -
回复 使用道具 举报
不是的,有virtual修饰的方法才是虚方法,虚方法需要在其派生类中重写override.
建议看一下这篇文章:虚方法的重写http://blog.csdn.net/kj297296053/article/details/8213550
回复 使用道具 举报
.net默认的方法都是非虚方法,只有用virtual修饰的方法才为虚方法。
回复 使用道具 举报
当然不是,用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 关键字的方法就不是虚方法。

希望对你有帮助
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马