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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© liangdmaster 中级黑马   /  2014-7-23 21:17  /  1636 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

例:
虚方法:
public class Father
{
     public virtual void PlayGame()
      {
            
      }
}

抽象方法:
public abstract class Father
{
     public abstract void PlayGame();
}


如上,为什么写虚方法时类前不加virtual,而写抽象方法时类前必须加abstract?

6 个回复

倒序浏览
本帖最后由 许庭洲 于 2014-7-23 21:38 编辑

1.在C#中,可以将类声明为抽象类。方法是在类定义中将关键字 abstract 置于关键字 class 的前面。例如:
public abstract class A
{
    // Class members here.
}
2.抽象类也可以定义抽象方法。方法是将关键字 abstract 添加到方法的返回类型的前面。例如:
public abstract class A
{
    public abstract void DoWork(int i);
}
3.在C#中,若要使方法成为虚方法,必须在基类的方法声明中使用 virtual 修饰符。然后,派生类可以使用 override 关键字重写基虚方法,或使用 new 关键字隐藏基类中的虚方法。
class GraphicsClass  //基类方法必须定义为 virtual。
{
    public virtual void DrawLine() { }  
    public virtual void DrawPoint() { }
    public virtual void DrawRectangle() { }
}

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

回复 使用道具 举报
virtual表示这个方法可以被子类override重写。
如果子类里的方法和父类的内部实现不同,那么就去override这个方法。相反,如果相同,可以继承父类方法。
virtual只是明确标示此方法可以被重写, 其实它和一般的方法没有什么区别
也有说virtual修饰符是会隐式继承的。

---------------------------------------------------------------------------------------
因为抽象方法只是声明, 不提供实现,必须被派生类来继承,覆盖的方法。

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

回复 使用道具 举报
类前加virtual,虚类,没有意义啊。子类已经继承父类了,父类方法用virtual修饰,设为虚方法,是方便子类方法重写,能够实现多态。类前加virtual,难道子类需要重写父类吗?抽象方法必须定义在抽象类中,并且子类继承的父类是抽象类的话,那么父类中的抽象方法是必须要被子类重写的,不然会报错。

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

回复 使用道具 举报
虚方法在基类中加了virtual,在子类中实现方法名前加override,虚表示可以重写,运行时绑定,抽象表示只有定义没有实现,希望对你有所帮助。

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

回复 使用道具 举报
同学,你好当有人给你回复后,请你及时把帖子编辑为提问结束,这样版主才给你加分
回复 使用道具 举报
楼上正解
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马