将派生类传递给API方法代替基类

时间:2018-07-24 13:32:27

标签: c# api inheritance

我正在尝试编写一个接受基类的API方法,以允许传入多个不同的派生类,例如...

//Classes in program
public abstract class Game
{
    public int NoOfPlayers {get; set;}
}

public class Chess : Game
{
    public int SquaresOnBoard {get; set;}
    public bool KingInCheck {get; set;}
    public Color ColorToMove {get; set;}

    public Chess(){...}
}

public class Uno : Game
{
    public int CardsInDeck {get;set;}
    public Color CurrentColor {get;set}
    public int CurrentNumber {get; set;}

    public Uno() {...}
}

//API method
[Route(BaseRoute+"startGame"), HttpPost]
public ApiResponse StartGame(Game gameToStart)
{
    if (gameToStart is Uno) {...}
    else if (gameToStart is Chess) {...}
}

问题是,即使我知道数据正在传入,gameToStart始终为null。我相信(但我不确定),这是因为我的代码期望的东西看起来像Game的签名,而不是具有Uno或Chess属性的东西。

有没有办法做到这一点(使用Game类型的参数,但传入与Uno或Chess属性匹配的东西)?

可能有用的信息:该API由MVC.NET API提供支持。

提前谢谢!

1 个答案:

答案 0 :(得分:0)

类的继承是正确的,但是您忘记了UpcastingDownCasting的概念,有关更多信息,请参见:here

请注意,Game类可能是国际象棋或Uno,而ChessUno可能是游戏。当您将Game类的对象传递给您的方法时,该Game永远不会是Uno或否!

我认为最好的方法是您必须创建一个混合类并使用它们来检查您的游戏。