В C# существуют три важных механизма, связанных с полиморфизмом: перегрузка метода (method overloading), переопределение метода (method overriding) и перекрытие метода (method hiding). Несмотря на схожие названия, они имеют различные цели и применяются в разных ситуациях.
Перегрузка метода (Method Overloading)
Перегрузка метода – это возможность объявлять несколько методов с одинаковым именем, но разными параметрами (различие в их количестве или типах). Выбор нужного метода происходит на этапе компиляции.
class Calculator
{
public int Add(int a, int b)
{
return a + b;
}
public double Add(double a, double b)
{
return a + b;
}
}
Здесь метод Add
перегружен: одна версия принимает int
, другая – double
.
Переопределение метода (Method Overriding)
Переопределение метода используется в объектно-ориентированном программировании, когда метод в базовом классе помечается как virtual
, а в производном классе он переопределяется с помощью ключевого слова override
.
class Animal
{
public virtual void MakeSound()
{
Console.WriteLine("Animal makes a sound");
}
}
class Dog : Animal
{
public override void MakeSound()
{
Console.WriteLine("Dog barks");
}
}
В этом примере метод MakeSound
из Animal
переопределён в Dog
, изменяя его поведение.
Перекрытие метода (Method Hiding)
Перекрытие метода применяется, когда метод в производном классе использует ключевое слово new
, скрывая метод из базового класса без его переопределения.
class BaseClass
{
public void Show()
{
Console.WriteLine("BaseClass Show");
}
}
class DerivedClass : BaseClass
{
public new void Show()
{
Console.WriteLine("DerivedClass Show");
}
}
Здесь метод Show
в DerivedClass
скрывает метод Show
из BaseClass
, но не переопределяет его.
Перегрузка, переопределение и перекрытие методов – важные механизмы ООП в C#. Они позволяют улучшить гибкость кода, но важно правильно понимать их различия и применять их в соответствующих ситуациях.