在这种情况下如何使用方法覆盖?

时间:2013-11-21 21:04:35

标签: c# method-overriding

所以这是我的班级,我刚刚学到了一些关于继承的知识。我听说过重写方法,但在这种情况下我该怎么做?

class Game
{
    string consoleName;
    int gameID;

    public Game(string name, int id)
    {
        this.consoleName = name;
        this.gameID = id;
    }

   public string displayGame()
   {
        return consoleName + " is the console I am playing";
   }

这是我的孩子班。

class RolePlayingGame : Game
{
    int level;

    public RolePlayingGame(string name, int id, int lv) : base(string name, int id)
    {
         this.level = lv;
    }

    // override method for displaying. meant to display what the game class displayed and "I am level " + level
}

4 个答案:

答案 0 :(得分:3)

您需要先更改基类:

class Game
{
   ...
   public virtual string displayGame()
   {
       return consoleName + " is the console I am playing";
   }
}

在您继承的类(子类)中,

class RolePlayingGame : Game
{
     ...
     public override string displayGame()
     {
         ...
         base.displayGame();  // If you need to call the base class.
         ...
     }
}

答案 1 :(得分:2)

displayGame()课程中的Game更改为虚拟。

RolePlayingGame中覆盖如下:

public override string displayGame() {
    return base.displayGame() + " - I am level " + level;

}

答案 2 :(得分:1)

您需要做两件事。在class Game中,您必须将方法声明为虚拟。

public virtual string DisplayGame(){ ... }

然后在class RolePlayingGame中,您必须声明您正在覆盖方法override。 (您也可以使用new隐藏方法。)

public override string DisplayGame(){ ... }

以下是有关覆盖与隐藏MSDN

的更多信息

答案 3 :(得分:1)

  1. 使DisplayGame()成为Game类中的虚拟方法。
  2. public virtual string displayGame() { ... }
    
    1. 在RolePlayingGame中,定义覆盖方法
    2. public override string displayGame() 
      { 
        return String.Format("Game {0}, Level {1}", this.name, this.level); 
      }
      

      顺便说一句,你需要一个成员“字符串名称”来存储游戏类游戏的名称。

      您可以参考:http://msdn.microsoft.com/en-us/library/vstudio/9fkccyh4.aspx。你可以遵循一些好的和简单的例子。