Что такое метод в объектно-ориентированном программировании (ООП)?

«Что такое метод в объектно-ориентированном программировании (ООП)?» — вопрос из категории ООП, который задают на 25% собеседований C# Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Метод в ООП — это функция или процедура, принадлежащая классу (или его экземпляру — объекту), которая определяет поведение или действия, которые может выполнять класс/объект. Методы инкапсулируют логику, работающую с данными объекта (полями).

Ключевые характеристики метода:

  • Принадлежность: Определяется внутри класса.
  • Сигнатура: Уникально идентифицируется именем и списком типов параметров (порядок важен!). Возвращаемый тип не входит в сигнатуру для целей перегрузки.
  • Тело: Блок кода, выполняемый при вызове метода.

Пример базового метода в C#:

public class Calculator
{
    // Поле (данные)
    private string _model;

    // Метод экземпляра. Работает с данными КОНКРЕТНОГО объекта.
    public int Add(int operandA, int operandB)
    {
        // Может обращаться к полям объекта, например, логировать вызов с помощью _model
        return operandA + operandB;
    }

    // Статический метод. Принадлежит КЛАССУ в целом, а не объекту.
    public static double CalculateCircleArea(double radius)
    {
        return Math.PI * radius * radius;
    }
}

// Использование:
Calculator myCalc = new Calculator();
int sum = myCalc.Add(5, 3); // Вызов метода экземпляра: 8

// Вызов статического метода через имя класса, а не объекта
double area = Calculator.CalculateCircleArea(10.0);

Важные концепции, связанные с методами:

  1. Модификаторы доступа (public, private, protected, internal): Контролируют, откуда можно вызвать метод.

    public void PublicMethod() { } // Доступен отовсюду.
    private void PrivateMethod() { } // Доступен только внутри этого класса.
  2. Перегрузка методов (Overloading): Возможность иметь несколько методов с одним именем, но разными сигнатурами (разное количество или типы параметров).

    public void Display(int number) { Console.WriteLine($"Integer: {number}"); }
    public void Display(string text) { Console.WriteLine($"String: {text}"); } // Перегрузка
    // Вызов: Display(10) и Display("Hello") будут работать корректно.
  3. Переопределение методов (Overriding): В иерархии наследования дочерний класс может предоставить свою собственную реализацию виртуального метода родительского класса, используя ключевые слова virtual и override.

    public class Shape
    {
        public virtual void Draw() { Console.WriteLine("Drawing a shape"); }
    }
    public class Circle : Shape
    {
        public override void Draw() { Console.WriteLine("Drawing a circle"); } // Переопределение
    }
  4. Параметры: Могут передаваться по значению (копия), по ссылке (ref), как выходные параметры (out) или как параметры-массивы (params).

Итог: Методы — это "действия" объектов. Они обеспечивают инкапсуляцию, позволяя скрыть сложную внутреннюю реализацию за простым интерфейсом вызова, и являются основой для полиморфизма через перегрузку и переопределение.