"Отсъства reflection." ? Коментар от проверката [C# OOP Advanced Exam, 7 Aug 2016]
Има ли други хора с този коментар, които ползват reflection-а от началния проект с условието?
Във функцията ProcessWaste(IWaste garbage) има GetCustomAttributes който е от Namespace: System.Reflection
Ако взимането на атрибута на клас не е рефлекшън тогава какво е? Защо не ни е казано да не разчитаме, че само имплементирания на готово рефлекшън ще ни е достатъчен за да имаме максимум точки от графата Reflection?
Имам 30 точки от Judge разчитайки на ProcessWaste(IWaste garbage). Това трябва да е доказателство, че го ползвам правилно и не съм го закоментирал.
Това ми е функцията. Почти не е променена. Само съм добавил .BaseType защото не работеше.
public IProcessingData ProcessWaste(IWaste garbage)
{
Type type = garbage.GetType();
DisposableAttribute disposalAttribute =
(DisposableAttribute)type
.GetCustomAttributes(true)
.FirstOrDefault(x => x.GetType().BaseType == typeof(DisposableAttribute));
IGarbageDisposalStrategy currentStrategy;
if (disposalAttribute == null
|| !this.StrategyHolder.GetDisposalStrategies.TryGetValue(disposalAttribute.GetType(), out currentStrategy))
{
throw new ArgumentException(
"The passed in garbage does not implement a supported Disposable Strategy Attribute.");
}
return currentStrategy.ProcessGarbage(garbage);
}
Ами в случая аз по какъв начин трябва да променя core локиката. Имам предвид че това ще продължава да работи.
1. Добавям си нов клас от тип Боклук. Анотирам го така че да работи с reflection-a
2. Добавям си клас тип стратегия за усвояване на боклука. Run
Защо ми е да добавям мое като в проекта има? Сложността даже беше да успеем да разберем как да го ползваме.
Много хора даже вместо да ползват този reflection на готово, са го заобикаляли, например с enum, switch и т.н.
Aми затова те питам - не знам как си направил добавянето. По принцип при добавянето на Waste в холдъра се добавя и неговата стратегия. Аз това го правя с рефлекшън по анотациата му, за да става автоматично. Там с рефлекшън ли го правиш или с ифове или си вкарал типа стратегия в самия waste ( което не е много ок ). ?
Не стратегиите ми не са в Waste. Различни класове са. Едните наследяват IGarbageDisposalStrategy, другите Waste. Анотациите съм ги сложил само над Waste класовете. IGarbageDisposalStrategy-ите ги добавям ръчно, ред по ред в StrategyHolder. Не съм си играл с тях. Ти и тях ли си оптимизирал с анотации? То кое по напред да направиш за 6 часа - като започнеш с 100те страници условие... Значи може да ползвам просто по-малко reflection, не липсва напълно...
Ами то това е условието за тези 20 точки - да се направи автоматично. Реално се пише на има няма 5-10 реда. Взимаш анотацията на Waste-a и взимаш името й. По името викаш класа на стратегията й, инициализираш я и я добавяш заедно с waste-a. Пример - Paper -> @Burn -> BurnSrategy.
Taка се прави reusable и не е нужно да добавяш ръчно каквото и да е в холдъра
Колега не го взимаи присърце.
То и аз писах щот бях изумен - при мен и меин метода не са успели да открият.
Ето ти линк загледаи се в коментарите и си прави изводите !!!
"https://softuni.bg/forum/11257/java-oop-advanced-exam-vyprosi-otnosno-komentara-kym-ocenkata"
Просто са очаквали да видят точно опридилени имплементаций - респективно ако не си ги направил
точно по този начин или не си ги именовал точно по този начин или са в пакет които не е именован точно по този начин ......итн значи липсват.
Дано да съм ти бил полезен
Поздрави, Косьо