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

Ответ

Метод экземпляра — это метод, который принадлежит конкретному объекту (экземпляру класса). Он оперирует данными этого объекта и вызывается через ссылку на экземпляр. Внутри такого метода доступен неявный указатель 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()) и имеет полный доступ к состоянию этого объекта.

Ответ 18+ 🔞

А, ну вот, смотри, объясняю на пальцах, как всегда. Метод экземпляра — это типа личный раб объекта, его персональная функция. Он пришит намертво к конкретной хуйне, которую ты создал через new. Без этой самой хуйни — объекта — его и вызвать-то нихуя нельзя, он просто не существует.

В чём соль, блядь:

  • Ковыряется он строго в кишках своего родного объекта. Хочет поле поменять — пожалуйста. Свойство прочитать — да ради бога. Всё через волшебное слово this, которое значит «эй, да я же про себя, про этого уёбка!».
  • Пока ты не наклепал объектов, этот метод спит беспробудным сном. Нет экземпляра — нет и метода, всё просто.
  • И главная примета — на нём нет этой ебаной бирки static. Вообще. Если видишь 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("Ты чё, мудила, положить надо, а не вынуть!");

        _balance += amount; // Лепит бабло к балансу ЭТОГО самого счёта
        Console.WriteLine($"{Owner}, твой новый баланс: {_balance}");
    }

    // Ещё один такой же, глянуть баланс
    public decimal GetBalance() => _balance;
}

// Использование, смотри как работает
var account1 = new BankAccount("Алиса", 1000);
var account2 = new BankAccount("Боб", 500);

account1.Deposit(200); // Кладет 200 на счёт Алисы. _balance у account1 стал 1200
account2.Deposit(100); // А это уже Бобу. Его _balance теперь 600

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

Чем не статический метод, ёпта?

  • Статический метод (public static void SomeMethod()) — это как общая турбина на весь класс. Вызвал его через имя класса (BankAccount.SomeMethod()), и он нихуя не знает про твои личные поля _balance, потому что у него нет доступа к this. Он как будто в вакууме.
  • Метод экземпляра — это персональный завхоз у каждого объекта. Вызываешь через точку от объекта (account1.Deposit(...)), и он сразу лезет в карманы к своему хозяину, всё видит, всё меняет. Вот и вся разница, блядь.