Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从派生类访问基类成员变量的值_C#_Inheritance - Fatal编程技术网

C# 如何从派生类访问基类成员变量的值

C# 如何从派生类访问基类成员变量的值,c#,inheritance,C#,Inheritance,我有3个类:类PassengerDetails,它由类FlightDetails继承,而类FlightDetails又由类Details继承。PassengerDetails和FlightDetails都有一个方法Accept,该方法接受一些参数并将其分配给该类的局部变量(声明为受保护)。我需要做的是使用一个方法Show in Details来打印类PassengerDetails和FlightDetails的那些局部变量的值。 以下是我整个代码的几个部分: class Passenge

我有3个类:类PassengerDetails,它由类FlightDetails继承,而类FlightDetails又由类Details继承。PassengerDetails和FlightDetails都有一个方法Accept,该方法接受一些参数并将其分配给该类的局部变量(声明为受保护)。我需要做的是使用一个方法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);
当我这样做时,我得到的只是这些局部变量的默认值。
有人能帮你吗?

你正在调用
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

的属性,您正在对所讨论的类的单独实例调用th
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

,您可以通过

 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的集合,这不是更有意义吗?这样,您就可以表示关系“航班详细信息是一种详细信息,乘客详细信息是一种详细信息,航班详细信息包括所有乘客的详细信息。”