Loading...
Hristo_Penchev avatar Hristo_Penchev 389 Точки

[Homework] КПК - QualityClasses - {4} Inheritance and Polymorphism - автоматично извикване на ToString

Здравейте,

По принцип реших задачата, но ендо нещо не ми е ясно и ме гложди любопитството. Имаме неформатирания клас LocalCourse

http://pastebin.com/j7Dmr7wg

В теста като зададем примерно LocalCourse course = new LocalCourse("Database");

После имам ConsoleWriteLine(course) и се стрингосва както трябва, дори без да му задам .ToString() изрично.

След това обаче имаме преработен клас LocalCourse:

http://pastebin.com/kpghyNMY

който наследява Course:

http://pastebin.com/kpghyNMY

Тук вече като задам ConsoleWriteLine(course) ми изписва само InheritanceAndPolymorphism.OffsiteCourse (името на проекта и класа). Като задам ConsoleWriteLine(course.ToString()) го принти както трябва. И ми е любопитно защо се получава така.

Тагове:
0
C# OOP Advanced 30/03/2015 12:07:59
Valleri avatar Valleri 304 Точки

Постни си цялото решение в Гитхъб да видим защо става така.

0
AleksandurSeferinkin avatar AleksandurSeferinkin 333 Точки

Клас : Course.cs

Line: 41 - public virtual string ToString()

Замени virtual с override и проблема ще бъде решен!

3
Filkolev avatar Filkolev 4482 Точки

Много странно е направено така с virtual. Аз като овъррайдвам метода винаги почвам с override и VS ми дава веднага опциите; обикновено са само 3-те основни. 

В случая това virtual омазва приоритета, на лекция го обясниха - при овъррайдване се вика метода на най-конкретния клас. Virtual явно работи като new и го презаписва.

1
AleksandurSeferinkin avatar AleksandurSeferinkin 333 Точки

VS 2014 дава warning, че не си написал 'new', защото по този начин скриваш базовия метод. Това важи и за пропъртитата.

0
Hristo_Penchev avatar Hristo_Penchev 389 Точки

Ясно, мерси. Явно в това ми е била грешката.

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.