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
的构造函数应该有 ticketcount
和 ticketprice
作为参数,fx:
public PlayTicket(string sn, int ticketcount, double ticketprice) : base(ticketcount, ticketprice)
{
//...
}
调用父构造函数子构造函数时,应将子构造函数的参数值传递给父构造函数。
你的子构造函数应该是这样的:
public PlayTicket(string sn, int ticketcount,double ticketprice) : base(ticketcount, ticketprice)
{
}
这样,ticketcount
和 ticketprice
转到父构造函数并进行相应的初始化。
创建 PlayTicket 的新对象时,您应该这样做:
Ticket playTicket = new PlayTicket("mySN", 20, 200);
正如 JonSkeet 在评论中建议的那样,您应该使用小数表示货币价值。
我正在完成一项任务,允许用户购买几种不同类型活动的门票。我必须对无法实例化的票证使用 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
的构造函数应该有 ticketcount
和 ticketprice
作为参数,fx:
public PlayTicket(string sn, int ticketcount, double ticketprice) : base(ticketcount, ticketprice)
{
//...
}
调用父构造函数子构造函数时,应将子构造函数的参数值传递给父构造函数。
你的子构造函数应该是这样的:
public PlayTicket(string sn, int ticketcount,double ticketprice) : base(ticketcount, ticketprice)
{
}
这样,ticketcount
和 ticketprice
转到父构造函数并进行相应的初始化。
创建 PlayTicket 的新对象时,您应该这样做:
Ticket playTicket = new PlayTicket("mySN", 20, 200);
正如 JonSkeet 在评论中建议的那样,您应该使用小数表示货币价值。