[OOP] Defining Classes Part One - Задача 9


2

Здравейте, колеги! Не видях тема за тази задача и реших да направя (извинявам се ако вече има и не съм я видял), за да можем да я дискутираме. Лично аз имам малко проблеми с точното изпълнение на условието. Ето го и него:

 

9.Add a property CallHistory in the GSM class to hold a list of the performed calls. Try to use the system class List<Call>.
 
Мисля, че направих решение, което работи, но за жалост не можах да го направя с property, а просто направих поле, а в конструктора на GSM добавям "nameOfList".add("nameOfCall");
 
Тук е и решението на задачата. Очаквам мнения и препоръки. 
 
Поздрави! :)

 




Отговори



4
Според мен трябва да се създаде поле което е лист от обекти които са от тип Call:
private List



0
Пробвах по твоя начин и видях че става, но не разбирам как добавяш запис, като няма сетър? Аз дефинирах направо автоматично пропърти: public List

от AntonPetrov (654 точки)


0
Някой друг да има идея за тази задача ?
Условието е: "Add a property CallHistory ... " дали не трябва да създаваме без да дефинираме поле (field) ? Май се иска да нямаме това: private List

от flyer87 (30 точки)


0

както каза колегата първо  дефинираш поле

private List<Call> callHistory

и след това пропърти

       public List<Call> CallHistory
       {
            get { return callHistory; }
           set { callHistory = value; }
       }

 


от AsenVal (3487 точки)


-1

Колеги не е ли  целта на  да направим CallHistоry както е в библиотеките на msdn, но във нашият случай да е в GSM. Та въпроса ми е къде ще добавяме call, защото аз лично не знам възможно ли е това да стане в класа GSM, по-логично е да е в Main()

P.S. Еми май си отговорих. 

ето я и библиотеката

 

using System;
using System.Collections.Generic;

class Program { static void Main(string[] args) { List<Box> boxes = new List<Box>();
boxes.Add(new Box(8, 8, 4)); boxes.Add(new Box(8, 4, 8)); boxes.Add(new Box(8, 6, 4));
if (boxes.Contains(new Box(8, 6, 4))) { Console.WriteLine("An equal box is already in the collection."); } else { Console.WriteLine("Box can be added."); }
//Outputs "An equal box is already in the collection." } }
public class Box : IEquatable<Box> {
public Box(int h, int l, int w) { this.Height = h; this.Length = l; this.Width = w; } public int Height { get; set; } public int Length { get; set; } public int Width { get; set; }
public bool Equals(Box other) { if (this.Height == other.Height && this.Length == other.Length && this.Width == other.Width) { return true; } else { return false; } } }

от Al.polichronov (1567 точки)


1

Решението ми на цялото домашно е тук:https://github.com/stoyanovalexander/TheRepositoryOfAlexanderStoyanov/tree/master/DefiningClassesPartOne/DefiningClassesPartOne Направил съм каквото ти препоръчва Александър Маринов, но съм вкарал CALLHISTORY като параметър в конструктор(GSM.cs ред 20,21). После прaвя конструктор само с CALLHISTORY(GSM.CS РЕД 130). Самото решение на задачата е(GSM.cs ред (121,128)). Питаш как се ДОБАВЯ ЗАПИС (GSM.cs ред (134,138) ) ползвам този м-од в (GSMTest.cs ред(69,71) ), тук ползвам конструктра от (GSM.CS РЕД 130). Добавям запис и ползваики че CALLHISTORY е списък тоест чрез ADD(GSMTest.cs ред(59,66) ) .

 


от alexander (147 точки)


1


След известни перипетии, мисля че се получи добро решение, макар че както с всички други задачи от ООП (поне на началното ниво на което съм лично аз в момента) не мога да съм сигурен, че е абсолютно коректно по отношение на условието. Създал съм статични поле и пропърти, а след всяко инстанциране на нов член на класа го добавям към списъка и в края разпечатвам всички членове с override на string()

http://pastebin.com/iSLUSyaV


от stoianpp (415 точки)


0
как ползваш List

от d.brezoev (212 точки)

0
Ами той листа ми е статичен, така че откъдето и да е видим, мога да си вземам стойностите директно. По същия начин стоят нещата и със setter-а. Реално мога да мина и без него, защото тук нямам никаква верификация, но в името на енкапсулацията... :)

от stoianpp (415 точки)



0
Колеги, как добавяте стойност в този List<Call> ? 
Правя някакви глупости, като Static List<Call>, но съм 100% сигурен, че това е грешно. Когато направя пропърти 
 public List<Call> callHistory
  1.        {
  2.             get { return callHistory; }
  3.            set { callHistory = value; }
  4.        }
как да му подам стойност в конструктора (callHistroy.add) ?



0
Създай си метод AddCall(Call c) { this.list.Add(c) ; } Аналогично и за другите методи, ако искаш допълнителна функционалност.

от stinger907 (307 точки)


0

Колеги , в няколко коментара , е дадено :

public List<Call> CallHistory

{

get

{

}

set

{

}

}

 

Според мен за да бачка правилно , без излишно писане трябва да е следното нещо :

public Call CallHistory

{

get

{

}

set

{

callHistory.Add(value)

}

}

 

 


от radotch (20 точки)


0
В условието пише "to hold" само, а добавянето на обажданията към хронологията се изисква да се направи чрез метод.



1

https://github.com/Sh0nZi/TelerikAcademy/tree/master/OOP/DefiningClassesOne

Ето го моето решение. Аз просто си пазя всички calls в един лист и си адвам с метод, в пропъртито единствено си взимам листа (хронологията на обажданията), за да мога да си го използвам в тестовете.