пятница, 4 июля 2014 г.

Як перевизначати ? overloading і overriding в .NET

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) це не літературне джерело і тут можуть бути помилки

Комментариев нет:

Отправить комментарий