Обработвайте компактно няколко обекта със същите свойства

Има 6-то Отговори в тази тема. Последният пост (13 юли 2013 г., 14:11 ч.) Е от mocede.

компактна

mocede

Регистриран: 7 юли 2013 г.

Бих искал да разработя малка програма, която основно се държи по следния начин:

Да кажем, че имам банан, пъпеш, ябълка и ягода.

Всички имат еднакви, но специфични характеристики: тегло, съдържание на захар и калории.

Сега искам автоматично да изчисля общото тегло, общото съдържание на захар и общите калории, ако имам 5 банана, 3 пъпеша и 2 ябълки. Броят на плодовете зависи от приноса на потребителя.

Първо трябва да дефинирам свойствата. В C ++ най-вече възлагам това на външни изпълнители като проста функция в допълнителен файл, където са направени само такива дефиниции. Това направи действителния изходен код ясен и по-лесен за поддръжка.

Как мога да приложа това във VB? Мисля, че решението е доста просто, но мисля, че е малко на тръбата, особено след като в моя практически пример имам около 30 "плода", всеки с по 10 еднакви, но специфични свойства.

Благодаря ви предварително "

РодОт Германия

Регистриран: 30 септември 2010 г.

Изходен код на VB.NET

  1. За всеки плод в myObstList
  2. "направи нещо с плодове
  3. Следващия

mocede

Регистриран: 7 юли 2013 г.

Благодаря за отговора и за правилния речник!

Отново за да повторя дали съм разбрал правилно твърдението ви:

Качвам се в менюто „Добавяне на клас на проект.“ и създайте нов (основен) клас, наречен "Frucht.vb".

Там създавам общите свойства:

Изходен код на VB.NET

  1. Публичен клас base class_fruit
  2. Затъмнете теглото като цяло число
  3. Съдържание на слаба захар като цяло
  4. Затъмнете калориите като цяло
  5. Краен клас

В нов клас(?) в файл с допълнителен клас(?) Сега излагам плодовете с вашите специфични атрибути:

Изходен код на VB.NET

  1. Публичен клас abglKlasse_apfel
  2. Затъмнете теглото като цяло число = 50
  3. Затъмнете съдържанието на захар като цяло число = 100
  4. Затъмнете калориите като цяло число = 200
  5. Краен клас

Правилно?

Как се разбира това с хитростта? Доколкото знам, той представлява типизиран списък от обекти (= моите хора?!), До които мога да получа достъп чрез индекс.

Все още не разбирам напълно как мога да кажа, че с 3 ягоди и 4 пъпеша програмата ми също обработва 3 пъти теглото на ягодата (както и всички други атрибути) и 4 пъти теглото, включително всички други атрибути на пъпеша.

Мисля, че имам проблем с разбирането тук. Объркан съм.: wacko: wacko: wacko:

Тази публикация вече е редактирана 1 път, последно от "mocede" (13 юли 2013 г., 12:29 ч.)

Точно, първо се нуждаете от основен клас. Този клас съдържа всички свойства, които се споделят от всички плодове.

Изходен код на VB.NET

  1. Обществени плодове от клас MustInherit
  2. Публично тегло като цяло
  3. Обществено съдържание на захар като цяло
  4. Публичните калории като цяло число
  5. Краен клас

След това за всеки отделен плод създавате отделен клас, който ще наследи свойствата и методите на класа плодове. Новият метод се извиква, когато обектът е създаден. След това в метода задаваме съответните стойности за плодовете.

Изходен код на VB.NET

  1. Ябълка от обществен клас
  2. Наследява плодовете
  3. Публична под нова ()
  4. Тегло = 50
  5. Захар = 100
  6. Калории = 120
  7. Крайна под
  8. Краен клас


Сега нека направим списък на всички плодове и да преминем през списъка.

Изходен код на VB.NET

  1. 'Създайте списък от типа "Плодове"
  2. Dim Frucht Списък като нов списък (на Frucht)
  3. „Добавете ябълка към списъка
  4. FruchtListe.Add (Нова Apple)
  5. - Преминете през списъка
  6. За всеки CurrentFruit като плод в FruitList
  7. Messagebox.Show ("Плодовете имат" & CurrentFruit.Calories & "Calories")
  8. Следващия

3646

Reg ([Ee] x) Полезни оценки 276 Приноси 2 654 Полезни оценки 276 Пол Мъжки езици за програмиране Използвани VB.NET, C # Бивше потребителско име nafets3646

Изходен код на VB.NET

  1. Форма за публичен клас 1
  2. Частен подбутон1_Click (изпращачът като обект, e като EventArgs) се справя с бутона 1.Click
  3. Dim MeinKridge As New List (Of Frucht) 'Вашият хладилник
  4. MeinCridge.Add (New Apple) 'Към хладилника се добавя ябълка
  5. MeinKridge.Add (New Banana) 'И банан също
  6. „Сега трябва да добавите манго, но тъй като обикновено не го купувате, нямате клас за него.
  7. „Така че нека създадем плод с датите за манго
  8. MyCridge.Add (New Frucht With)
  9. За всеки FruchtImCridge Както Frucht In MeinCridge „Сега преглеждаме всеки плод в хладилника и извеждаме неговите данни
  10. MessageBox.Show (String. Format ("Описание:; Тегло:; Съдържание на захар:; Калории:", _
  11. Плодове в хладилник. Описание, _
  12. Плодове в хладилника. Тегло, _
  13. Плодове в хладилника. Съдържание на захар, _
  14. Плодове в хладилника. Калории))
  15. Следващия
  16. Крайна под
  17. Краен клас
  18. Обществен клас плодове
  19. Означение на публичната собственост като низ
  20. Теглото на публичната собственост двойно
  21. Съдържание на захар в публична собственост като цяло
  22. Калориите в публичната собственост като цяло
  23. Краен клас
  24. Ябълка от обществен клас
  25. Наследява плодовете
  26. Публична под нова ()
  27. Аз. Описание = "Apple"
  28. Аз .тегло = 50
  29. Аз. Съдържание на захар = 100
  30. Аз. Калории = 200
  31. Крайна под
  32. Краен клас
  33. Банан от обществена класа
  34. Наследява плодовете
  35. Публична под нова ()
  36. Аз. Описание = "Банан"
  37. Аз .тегло = 100
  38. Аз. Съдържание на захар = 200
  39. Аз.Калории = 400
  40. Крайна под
  41. Краен клас

FreakJNS

Точно както в Пост # 5, и аз бих го направил. Въпреки това, няколко точки, които също бих включил:

Няма плод като реален обект, можете да ядете ябълка или банан, но не и „чист“ плод - плодът е само общ термин за реални обекти, но не и самият реален обект. За програмиране това означава, че не можете да създадете обект от тип плодове, а само истински плодове могат да бъдат създадени. Следователно класът плодове е абстрактен и трябва да бъде маркиран с MustInherhit.

Конструктор (=> Public Sub New (.)) в класа плодове също би имал смисъл. След това теглото, съдържанието на захар, калориите, обозначението и т.н. трябва да бъдат прехвърлени там като параметри. След това от конструктора на бетонните класове плодове можете удобно да се обадите на конструктора на горния клас. Мисля, че това е особено важно, когато определени стойности ТРЯБВА да бъдат зададени в горния клас - без конструктор бързо забравяте такава.

Съдържанието на захар, калориите и т.н. със сигурност са само намек, може да има много повече. Капсулирането на допълнителен клас само за хранителни стойности може да бъде полезно. На този етап можете да помислите за това, вместо да използвате списък (с хранителна стойност) вместо клас с фиксирани хранителни стойности. Това би имало предимството, че винаги добавяте хранителните стойности, които всъщност са необходими. Може да изглежда така в конструктора на класа на ябълките: Me.Nutrition values.Add (нова хранителна стойност ("Sugar", 42.7, eUnits.Gramm)).

Играта вече може да бъде продължена. Хлябът например също има име и хранителни стойности - но не е плод. Но и двете са годни за консумация. Абстрактен клас, годен за консумация, може да служи като най-висок клас за плодове, печени изделия и др. Къде да начертаете линията зависи от вашето приложение. Ако се интересувате само от плодове, няма смисъл да създавате дълги йерархии на наследяване (=> объркващо)