C#中的抽象继承

abstract inheritance in C#

我正在完成一项任务,允许用户购买几种不同类型活动的门票。我必须对无法实例化的票证使用 class,对每种特定类型的票证使用 subclass。

我 运行 遇到了我的第一个障碍,即子 class 的基本构造函数上的参数给我一个错误 "An object reference is required for non-static field"

这里是基地class

abstract class Ticket
{
    public int ticketcount;
    public double ticketprice;

    public Ticket()
    {
        ticketcount = 0;
        ticketprice = 0;
    }

    public Ticket(int ticketcount, double ticketprice)
    {
        this.ticketcount = ticketcount;
        this.ticketprice = ticketprice;
    }

}

这是子class。

class PlayTicket : Ticket
{
    public PlayTicket() : base()
    {

    }

    public PlayTicket(string sn) : base(ticketcount, ticketprice)
    {

    }
}

线路上出现错误

public PlayTicket(string sn) : base(ticketcount, ticketprice)

变量 "ticketcount" 和 "ticketprice" 所在的位置。我怎样才能最好地解决这个问题?还是我完全误解了如何以及为什么使用不可实例化的 class?

派生的 class PlayTicket 的构造函数应该有 ticketcountticketprice 作为参数,fx:

public PlayTicket(string sn, int ticketcount, double ticketprice) : base(ticketcount, ticketprice)
{
  //...
}

调用父构造函数子构造函数时,应将子构造函数的参数值传递给父构造函数。

你的子构造函数应该是这样的:

public PlayTicket(string sn, int ticketcount,double ticketprice) : base(ticketcount, ticketprice)
{

}

这样,ticketcountticketprice 转到父构造函数并进行相应的初始化。

创建 PlayTicket 的新对象时,您应该这样做:

Ticket playTicket = new PlayTicket("mySN", 20, 200);

正如 JonSkeet 在评论中建议的那样,您应该使用小数表示货币价值。