Loading...
dobri19 avatar dobri19 1 Точки

dynamic polymorphism

 Някой може ли да ми разясни, ако имам абстрактен клас Animal с абстрактни методи, и съответно негов наследник Dog  с имплементация на тези методи, при dynamic polymorphism, каква е разликата и защо трябва да предпочита едната декларация Animal dog = new Dog() или другата Dog dog = new Dog() , като съм наясно че при извикаване на методите в единия случай ще имаме runtime, а при другия compiletime , и съответно първият ще е по-бавен, а резултата е един и същ?

Тагове:
0
C# OOP Basics 16/01/2017 11:33:50
dobri19 avatar dobri19 1 Точки

 Здравейте, имам "един" доуточняващ въпрос по същата тема. Нека имаме същия пример, абстрактен клас Animal с абстрактни методи, и наследник Dog  с имплементация. Нека имаме и Animal dogBig = new Dog() и Dog dogSmall = new Dog(). Да направим и колекция List<Animal> animals = new List<Animal>(). Въпроса ми е защо компилаторът позволява и двата обекта да ги вкарам в листа? animals.Add(dogBig) и animals.Add(dogSmall). И третира ли ги по някакъв различен начин спрямо начинът им на създаване? Веднъж вкаран вътре в листа Dog dogSmall = new Dog(), става ли еквивалентен на другите обекти в листа които са инициализирани през базовия клас. И при извикване на методите при обхождане на листа компилаторът директно ли вика неговия метод или минава през базовия клас и съответно с виртуални таблици и пойнтъри търси конкретния метод както на dogBig? А когато създаваме Animal dogBig = new Dog() , компилатирът(compile-time) го третира като Animal, но всъщност знае че е Dog преди дори да викаме негови функции(run-time), но просто не ни позволява да ползваме директно методите му(compile-time), така ли е?

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