Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.12.2017, 09:40   #1
artems67
Пользователь
 
Регистрация: 17.11.2015
Сообщений: 62
Вопрос Нужна помощь с решением проблемы наследования класса в C#

У меня есть два класса: родительский класс Летательный аппарат (FlyApparat) и дочерний класс Планер (Planer).

У класса летательный аппарат есть свойства: вес(int weight) высота(int height) длина(length) качество материала(materials). Все они описаны в интерфейсе AddOptions, который и подключен к этому классу FlyApparat.

А в дочернем классе Планер есть метод formulaa. Который исходя из получаемых свойств из дочернего класса FlyApparat производит расчёт стоимости планера по выдуманной мною формуле в рублях ( formula = (weight + height + length) * materials), а потом заносит в переменную price цену в долларах (price = formula*60). price в данном классе у меня реализовано как свойство.

Далее я эту цену (price) пытаюсь через свойство вывести в окне приложения в поле textbox, а у меня почему-то выводится 0. Хотя значения в свойствах родительского класса FlyApparat есть.

В чём проблема ? :confused

Код родительского класса Летательный аппарат (FlyApparat):

Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{

    interface AddOptions
    {
        int weight { set; get; }
        int length { set; get; }
        int height  { set; get; }
        int materials { set; get; }
    }

    class FlyApparat : AddOptions
    {



        public int weight
        {
            set;
            get;

        }

        public int length
        {
            set;
            get;
        }

        public int height
        {
            set;
            get;
        }

        public int materials
        {
            set;
            get;
        }
        

    }
}
Код дочернего класса Планер (Planer)

Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{



    class Planer : FlyApparat
    {

        int formula;


        public void formulaa()
        {
            formula = (weight + height + length) * materials;
            price = formula*60;
        }

        public int price
        {
            set;
            get;

        }


    }
}
Код самой формы Form1.cs (это основное "тело проги", т.к. классы у меня в отдельных .cs файлах проекта)

Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }


        AddOptions flyApp = new FlyApparat();
        Planer Planer1 = new Planer();

        private void button1_Click(object sender, EventArgs e)
        {
            Boolean SuccessMessage = false;

            if (textBox1.Text != "" && textBox2.Text != "" && textBox3.Text != "")
            {
                flyApp.weight = Convert.ToInt32(textBox1.Text);
                flyApp.height = Convert.ToInt32(textBox3.Text);
                flyApp.length = Convert.ToInt32(textBox2.Text);
                SuccessMessage = true;
                
            }
            else
            {
                MessageBox.Show("Не все параметры заполнены корректно!", "Внимание", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                SuccessMessage = false;
            }


            if (comboBox2.SelectedIndex == 0)
            {
                flyApp.materials = 4;
                
                SuccessMessage = true;
            }
            else if (comboBox2.SelectedIndex == 1)
            {
                flyApp.materials = 2;
                SuccessMessage = true;
            }
            else if (comboBox2.SelectedIndex == 2)
            {
                flyApp.materials = 1;
                SuccessMessage = true;
            }
            else
            {
                MessageBox.Show("Не задано качество материала!", "Внимание", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                SuccessMessage = false;
            }

            if (SuccessMessage == true)
            {
                MessageBox.Show("Летательный аппарат успешно создан", "Успех", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                Planer1.formulaa();
                textBox7.Text = Convert.ToString(Planer1.price);
            }
        }
    }
}
Изображения
Тип файла: png Безымянный.png (44.0 Кб, 55 просмотров)
artems67 вне форума Ответить с цитированием
Старый 21.12.2017, 10:46   #2
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

точно по коду должен быть
Код:
flyApp.
а не
Код:
Planer1.
?
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.

Последний раз редактировалось Aleksandr H.; 21.12.2017 в 11:28.
Aleksandr H. вне форума Ответить с цитированием
Старый 21.12.2017, 12:11   #3
gantzboss
Пользователь
 
Регистрация: 02.11.2017
Сообщений: 31
По умолчанию

Цитата:
Сообщение от Aleksandr H. Посмотреть сообщение
точно по коду должен быть
Код:
flyApp.
а не
Код:
Planer1.
?
Так и есть, он создал два разных объекта. Родителя реализовывать вообще не надо.

Замени все flyApp на Planer1.

Цитата:
Сообщение от artems67 Посмотреть сообщение
Код:
  public void formulaa()
    {
      formula = (weight + height + length) * materials;
      price = formula*60;
    }
  public int price
  {
    set;
    get;
  }
Я думаю price надо вычислять в get, а не присваивать его в формуле.
Код:
  public void formulaa()
  {
    formula = (weight + height + length) * materials;
  }
  public int price
  {
    set;
    get{return formula*60;}
  }

Последний раз редактировалось gantzboss; 21.12.2017 в 12:21.
gantzboss вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужна помощь с решением задачи. Динамическая память на паскале Loginnn Паскаль, Turbo Pascal, PascalABC.NET 3 09.12.2015 20:53
Нужна помощь в создании класса и реализации функционала f1nger Помощь студентам 0 17.11.2015 13:37
Нужна помощь с решением задачи! Тьягор Помощь студентам 5 27.09.2014 20:06
нужна помощь с решением следующих задач! => f1n!Sh Помощь студентам 10 13.02.2008 23:03