label start:
Все що в світі виникло як правило виникало в наслідок лінтяйства вирішення якихось проблем, на мою думку для розуміння будьчого треба завжди починати з розуміння того які проблеми воно вирішує. Якшо мислити таким шляхом то з часом розумієш шо проблеми приблизно у всіх однакові але вирішення їх бувають різними і цікавими. Які проблеми вирішує те про що я зараз буду писати ? та стопудово зручність і читабельність коду. Чи можна жити без цього ? можна але не варто, ці реці не є якомось віддальонним ізвратом дотнета про який ніхто ніде не чув і не використовує.
Overloading і Overriding це перевизначеня !
Різниця тільки в тому перевизначення чого ? 8|.
На мою думку згадувати ті два слова як різні треба тільки коли йдеш на співбесіду :) на практиці якшо ти деву тикнеш пальцем і скажеш отовот мені заоверрайдай або заоверлоадай він всеодно зрозуміє шо ти хтів. Набагато важливішим знати шо воно таке і використовувати по призначенню.
Overloading дозволяє нам створити декілька однакових по назві і призначенню методів але з різними вхідними параметрами.
Наприклад:
Є метод який собі шось відпрацьовує, в солющені ті хто ним користуються мають вхідні данні двох комплексних типів AAA і BBB, якшо без Overloading то ми би мали один метод який має на вхід або AAA або BBB і користувачам цього метода довелось би перед викликом приводити в кожному місці виклику до типу.
Це не дуже зручно і тут майрософт придумав Overloading і сказав, тепер ви можете написати два однакових метода але в них мають бути різна кількість параметрів або різні типи і студія вже сама вибере шо куда і почьом.
По практиці оверлоадінг в методах використовують:
1) для опціональних параметрів
2) для розширення типів вхідних параметрів
Overriding дозволяє нам перевизначати базові імплементації методів і операторів. Нашо ?
Все дуже просто одним з використань є перевизначення Equals() і ToString()
Наприклад:
Якшо ми сотворили десяти поверховий комплексний тип і віримо в те що він прекрасний але незнаєм шо з ним робить ми можемо дотнету підсказати як наприклад
такі інстанси порівнювати.
Якшо творець мав файну фантазію і бізнес не заперечував там може бути наприклад сотня пропертів але важливою для порівняння є одна єдина !
В такому випадку ми можемо перевизначити Equals() для цього класу! а далі дот нет вже буде знати як правильно порівнювати вашу красоту.
Всі ми знаємо шо всі і вся в дотнеті хто пішли корінням від object зобовязані мати ToString()
Але часом воно не лабає так як треба і виводить аля назву классу, відповідно перевизначаєм, у методі пишем як отой десятиповерховий має бути у вигляді стрічки і маєм спокій.
Яка між ними різниця ? різниця в місцях застосування і типом призначення, якщо недостатньо goto start;.
І на кінець кусок коду зі stackoverflow де як на мене чувак в двух словах всьо отжог:
Overloading
Overloading is when you have multiple methods in the same scope, with the same name but different signatures.
//Overloading public class test
{ public void getStuff(int id) { } public void getStuff(string name) { }
}Overriding
Overriding is a principle that allows you to change the functionality of a method in a child class.
//Overriding public class test
{ public virtual getStuff(int id)
{ //Get stuff default location } } public class test2 : test
{ public override getStuff(int id)
{ //base.getStuff(id);
//or - Get stuff new location
} }PS: дві ремарки
1) десятиповерховий клас зі 100 пропертями погана практика
2) це не літературне джерело і тут можуть бути помилки
Комментариев нет:
Отправить комментарий