Что такое метод экземпляра (instance method) в ООП?

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

Ответ

Метод экземпляра — это метод, который принадлежит конкретному объекту (экземпляру класса). Он оперирует данными этого объекта и вызывается через ссылку на экземпляр. Внутри такого метода доступен неявный указатель this (в C#), ссылающийся на текущий объект.

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

  • Работает с состоянием объекта (его полями и свойствами).
  • Не может быть вызван без создания экземпляра класса.
  • В сигнатуре метода не содержит модификатора static.

Пример на C#:

public class BankAccount
{
    // Поле экземпляра (состояние объекта)
    private decimal _balance;
    public string Owner { get; set; }

    // Конструктор
    public BankAccount(string owner, decimal initialBalance)
    {
        Owner = owner;
        _balance = initialBalance;
    }

    // МЕТОД ЭКЗЕМПЛЯРА: работает с данными конкретного счёта
    public void Deposit(decimal amount)
    {
        if (amount <= 0)
            throw new ArgumentException("Deposit amount must be positive.");

        _balance += amount; // Изменяем состояние ТЕКУЩЕГО объекта
        Console.WriteLine($"{Owner}'s new balance: {_balance}");
    }

    // Ещё один метод экземпляра
    public decimal GetBalance() => _balance;
}

// Использование
var account1 = new BankAccount("Alice", 1000);
var account2 = new BankAccount("Bob", 500);

account1.Deposit(200); // Работает с состоянием account1 (_balance = 1200)
account2.Deposit(100); // Работает с состоянием account2 (_balance = 600)

// account1.GetBalance() вернёт 1200
// account2.GetBalance() вернёт 600

Сравнение со статическим методом:

  • Статический метод (public static void SomeMethod()) принадлежит самому классу, вызывается через имя класса (ClassName.SomeMethod()) и не имеет доступа к нестатическим полям и методам (через this).
  • Метод экземпляра принадлежит объекту, вызывается через объект (object.Method()) и имеет полный доступ к состоянию этого объекта.