как получить доступ к значению переменных-членов базового класса из производного класса - PullRequest
0 голосов
/ 09 января 2010

У меня есть 3 класса: класс PassengerDetails, который наследуется классом 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);

когда я делаю это, все, что я получаю, это значение по умолчанию этих локальных переменных.Может ли кто-нибудь PLZZ помочь ???

Ответы [ 2 ]

2 голосов
/ 09 января 2010

Вы вызываете th 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 голос
/ 09 января 2010

Вы можете получить доступ к значениям FlightDetails с помощью

 base.fieldname

и для доступа к значениям PassengerDetails добавьте свойство в FlightDetails:

public type property
{
    get {return base.fieldname;}
}

и в деталях использовать свойство.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...