我有3个类:类PassengerDetails,它由类FlightDetails继承,而后者又由类Details继承。 PassengerDetails和FlightDetails都有一个方法Accept,它接受一些参数并将其分配给该类的局部变量(声明为protected)。我需要做的是通过使用方法Show in Details我想打印类PassengerDetails和FlightDetails的局部变量的值。 这是我整个代码的一小部分:
class PassengerDetails
{
protected string strFirstName;
protected int iAge;
public void Accept(string FirstName, int Age)
{
strFirstName = FirstName;
iAge = Age;
}
}
class FlightDetails:PassengerDetails
{
protected DateTime dt;
protected int iNumPass;
public void Accept_1(DateTime date,int NumPass)
{
dt = date;
iNumPass = NumPass;
}
}
class Details : FlightDetails
{
public void Show(Label lbl)
{
lbl.Text= "" + strFirstName +"\n"+ iAge +"\n"+ dt.ToString() + "\n"+ iNumPass;
}
private void btnSubmit_Click(object sender, EventArgs e)
{
PassengerDetails pass = new PassengerDetails();
pass.Accept(txtFName.Text,Convert.ToInt32(txtAge.Text));
}
private void btn2Submit_Click(object sender, EventArgs e)
{
FlightDetails fgt = new FlightDetails();
fgt.Accept_1(Convert.ToDateTime(dtDep.Text),Convert.ToInt32(txtNPass.Text));
Details det = new Details();
det.Show(lblShow);
当我这样做时,我得到的只是那些局部变量的默认值。 有人能帮忙吗?
答案 0 :(得分:2)
您在相关类的不同实例上调用Accept
和Accept_1
方法。您的Details
类通过继承直接公开这些,因此您应该替换它:
PassengerDetails pass = new PassengerDetails();
pass.Accept(txtFName.Text,Convert.ToInt32(txtAge.Text));
用这个:
this.Accept(txtFName.Text,Convert.ToInt32(txtAge.Text));
或更简单(可以说):
Accept(txtFName.Text,Convert.ToInt32(txtAge.Text));
关键是,您的Details
实例已经是FlightDetails
和PassengerDetails
的实例,因此您无需创建单独的实例。但是,查看类名,我强烈怀疑您可能滥用继承,并且组合方法可能更合适,Details
公开类型FlightDetails
和PassengerDetails
的属性。
答案 1 :(得分:1)
您可以通过
访问FlightDetails的值 base.fieldname
并且要访问PassengerDetails的值,请向FlightDetails添加属性:
public type property
{
get {return base.fieldname;}
}
并在详细信息中使用属性。