这种继承有意义吗?

时间:2013-12-07 16:52:22

标签: c# inheritance

我正在尝试创建一个网球锦标赛应用程序。我正在寻找一种方法来容纳单打和双打的结果而不创建两个表。

我想知道是否可以完成以下内容?

public class Result
{
    public int ResultId { get; set; }
    public int TournamentId { get; set; }
    public int Round { get; set; }
    public DateTime? DatePlayed { get; set; }
    public bool? Completed { get; set; }
}

public class ResultSingle : Result
{
    public int Player1Id { get; set; }
    public int Player1Score { get; set; }
    public int Player2Id { get; set; }
    public int Player2Score { get; set; }
}

public class ResultDouble : Result
{
    public int Double1Id{ get; set; }
    public int Double1Score { get; set; }
    public int Double2Id { get; set; }
    public int Double2Score { get; set; }
}

那么当我查询单曲结果时,它将查询播放器表格,当我查询双打结果时,它将寻找双重合作伙伴。

这是正确的还是会使抽象更有意义?

2 个答案:

答案 0 :(得分:1)

这里的答案实际上取决于你自己实例化一个Result类的问题吗?如果没有那么抽象类可能是更好的选择。你所做的事情没有任何本质上的错误,但从一个角度来看,抽象类迫使你按照预期使用这个类,所以在这个意义上它更安全一些。

答案 1 :(得分:0)

我同意你的看法,试图将两个结果表合二为一,因为它经常用于查询和显示数据。 在我看来,你可以只定义一个结果类来存储游戏结果,但是添加一个名为“PlayerTeam”的类来定义付款人信息,尽管这必须是根据你的数据库结构。所以我的代码是这样的。

/// <summary>
/// game result
/// </summary>
public class Result
{
    public int ResultId { get; set; }
    public int TournamentId { get; set; }
    public int Round { get; set; }
    public DateTime? DatePlayed { get; set; }
    public bool? Completed { get; set; }
    public PlayerTeam Team1 { get; set; }
    public int Team1Score { get; set; }
    public PlayerTeam Team2 { get; set; }
    public int Team2Score { get; set; }
    //double flag
    public bool IsDouble { get; set; }
}

/// <summary>
/// player team, in single game, there is only one player.
/// </summary>
public class PlayerTeam
{
    public int TeamId { get; set; }
    public int Player1Id { get; set; }
    //if in single game, player2Id = 0 or -1, because there is only one player
    public int Player2Id { get; set; }
}