C# 如何从派生类访问基类成员变量的值
我有3个类:类PassengerDetails,它由类FlightDetails继承,而类FlightDetails又由类Details继承。PassengerDetails和FlightDetails都有一个方法Accept,该方法接受一些参数并将其分配给该类的局部变量(声明为受保护)。我需要做的是使用一个方法Show in Details来打印类PassengerDetails和FlightDetails的那些局部变量的值。 以下是我整个代码的几个部分:C# 如何从派生类访问基类成员变量的值,c#,inheritance,C#,Inheritance,我有3个类:类PassengerDetails,它由类FlightDetails继承,而类FlightDetails又由类Details继承。PassengerDetails和FlightDetails都有一个方法Accept,该方法接受一些参数并将其分配给该类的局部变量(声明为受保护)。我需要做的是使用一个方法Show in Details来打印类PassengerDetails和FlightDetails的那些局部变量的值。 以下是我整个代码的几个部分: class Passenge
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);
当我这样做时,我得到的只是这些局部变量的默认值。
有人能帮你吗?你正在调用
Accept
和Accept\u 1
方法来处理这些类的不同实例。您的Details
类通过继承直接公开这些信息,因此您应该替换它:
PassengerDetails pass = new PassengerDetails();
pass.Accept(txtFName.Text,Convert.ToInt32(txtAge.Text));
为此:
this.Accept(txtFName.Text,Convert.ToInt32(txtAge.Text));
或者,更简单地说(可以说):
关键是,您的
Details
实例已经是FlightDetails
和PassengerDetails
的实例,因此不需要创建单独的实例。但是,从类名来看,我强烈怀疑您可能误用了继承,而组合方法可能更合适,使用Details
公开类型FlightDetails
和PassengerDetails的属性,您正在对所讨论的类的单独实例调用thAccept
和Accept\u 1
方法。您的Details
类通过继承直接公开这些信息,因此您应该替换它:
PassengerDetails pass = new PassengerDetails();
pass.Accept(txtFName.Text,Convert.ToInt32(txtAge.Text));
为此:
this.Accept(txtFName.Text,Convert.ToInt32(txtAge.Text));
或者,更简单地说(可以说):
关键是,您的Details
实例已经是FlightDetails
和PassengerDetails
的实例,因此不需要创建单独的实例。但是,从类名来看,我强烈怀疑您可能误用了继承,而组合方法可能更合适,使用Details
公开类型的属性FlightDetails
和PassengerDetails
,您可以通过
base.fieldname
要访问PassengerDetails的值,请向FlightDetails添加属性:
public type property
{
get {return base.fieldname;}
}
详细信息请使用属性。您可以通过以下方式访问FlightDetails的值:
base.fieldname
要访问PassengerDetails的值,请向FlightDetails添加属性:
public type property
{
get {return base.fieldname;}
}
具体来说,请使用属性。问题是,上述3个类都在主窗体中,因此使用此关键字会出现错误“WindowsApplication1.frmMain”不包含“Accept_1”的定义。您的代码显示了在详细信息类中定义的这些方法-我怀疑您在某个地方丢失了括号。在这种情况下,您只需要创建一个Details
实例,并在该实例上调用两个Accept
方法,而不是创建每个父类的实例。但我仍然认为你应该关注构图而不是继承。thx很多,通过在主窗体类中创建一个Details实例,然后使用该实例调用btnSubmit_Click和btn2Submit_Click事件处理程序中的两个方法accept&accept_1,得到了我想要的结果。太好了-希望解释也有意义。问题是上面的3个类都在主窗体中,因此使用了这个关键字给出错误“WindowsApplication1.frmMain”不包含“Accept_1”的定义您的代码显示了在详细信息
类中定义的这些方法-我怀疑您丢失了括号。在这种情况下,您只需要创建一个Details
实例,并在该实例上调用两个Accept
方法,而不是创建每个父类的实例。但我仍然认为你应该关注构图而不是继承。thx很多,通过在主窗体类中创建一个Details实例,然后使用该实例调用btnSubmit_Click和btn2Submit_Click事件处理程序中的两个方法accept&accept_1,得到了我想要的结果。很好-希望解释也有意义。这种继承层次结构很奇怪。细节如何成为一种航班细节?航班详细信息如何成为乘客详细信息的一种?让Details作为FlightDetails和PassengerDetails的基类,并且FlightDetails包含PassengerDetails的集合,这不是更有意义吗?这样,您就可以表示关系“航班详细信息是一种详细信息,乘客详细信息是一种详细信息,航班详细信息包括所有乘客的详细信息。”这种继承层次结构很奇怪。细节如何成为一种航班细节?航班详细信息如何成为乘客详细信息的一种?让Details作为FlightDetails和PassengerDetails的基类,并且FlightDetails包含PassengerDetails的集合,这不是更有意义吗?这样,您就可以表示关系“航班详细信息是一种详细信息,乘客详细信息是一种详细信息,航班详细信息包括所有乘客的详细信息。”