Страницы

Поиск по вопросам

среда, 27 ноября 2019 г.

Как правильно: перегрузка или переопределение?

#c_sharp #терминология


В одних статьях пишут перегрузка, в других пишут переопределение. Тоже самое с наследниками
и производными. По смыслу это одно и то же, но как правильно: 


перегрузка или переопределение? 
в наследниках или в производных?


Чтобы далеко не ходить за примерами я стал искать прямо на сайте ответы по интересующим
меня методам Equals и OnModelCreating, которые описаны в документации как виртуальные,
и нашел следующие ответы:


"следует перегрузить метод OnModelCreating - и написать там примерно следующее"
27 май '15 в 15:53, Pavel Mayorov, 9,255
"базовый класс всех типов-значений, перегружает метод Equals"
30 сен '15 в 0:01, VladD, 74k  
"Переопределите Equals так, чтобы он сравнивал два экземпляра"
23 дек '15 в 8:52, PashaPash, 20.1k


Из контекста следует, что в ответах говорят о виртуальных методах.
Получается, что перегрузка и переопределение - это одно и тоже.
Хотелось бы понять как правильно: перегрузка или переопределение?

UPD: (2/10/2016 8:52 PM)   

Перегрузка и переопределение, как сказал rdom: это абсолютно разные вещи.
VladD внес исправления в свой ответ.
Ошибки в других ответах, надеюсь, также будут исправлены.
    


Ответы

Ответ 1



перегрузка или переопределение? По смыслу - это абсолютно разные вещи. Перегрузка (Overloading) - это возможность использовать одинаковые имена в пределах одного класса у методов сходных по своей сути, но не реализации,за счет расширения понятия имени метода до сигнатуры. Подробнее в соседнем вопросе Переопределение (Overriding) - относится к виртуальным и абстрактным методам. Это возможность замены виртуального или реализация абстрактного наследуемого метода базового класса методом производного класса. Пример: class A { virtual void SomeMethod(int par1, double par2) { } //Делаем перегруженный вариант метода для другого набора параметров void SomeMethod(double par1, int par2) {} } class B : A { //Переопределяем унаследованный виртуальный метод override void SomeMethod(int par1, double par2) { } } UPD в наследниках или в производных? тут разночтений нет. Производный класс, класс наследник, а также принятые в Java суб-класс или подкласс, являются синонимами. Также синонимами являются базовый класс, класс предок, супер-класс(java) и над-класс(java). Дабы не плодить споры: я использую перевод принятый в MSDN. В различных источниках могут использоваться другие варианты перевода. В любом случае, первичным остается смысл оригинальных терминов на английском.

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

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