Поиск

Статические методы

Статическим называется метод, который существует в классе как в таковом, а не в отдельных его экземплярах. Как и в случае других статических членов, главное преимущество статических методов в том, что они расположены вне конкретных экземпляров класса, не засоряя глобальное пространство приложения. При этом они и не нарушают принципов ООП, поскольку ассоциированы с определенным классом. Примером может служить API баз данных, написанный мной на С#. В моей иерархии классов есть класс SQLServerDb. Помимо базовых операций для работы с БД (new, update, read и delete), класс содержит метод, предназкаченный для восстановления БД. В методе Repair не нужно открывать саму БД. Я использую функцию ODBC (SQLConfigDataSource), которая предполагает, что БД закрыта. Однако, конструктор SQLServerDb открыл БД, указанную переданным ему именем. Поэтому здесь очень удобно использовать статический метод. Это позволило мне поместить метод в класс SQLServerDb, к которому он принадлежит, и даже не обращаться к конструктору моего класса. Очевидно, выгода клиента в том, что он также не должен создавать экземпляр класса SQLServerDb. В следующем примере вы можете видеть вызов статического метода (RepairDatabast) из метода Main. Заметьте, что для этого не создается экземпляр SQLServerDB:

using System;
class SQLServerDb
( { // Набор остальных обычных членов.
public static void RepairDatabaseQ <
Console.WriteLine("восстановление БД..."); > }
class StaticMethodlApp {
public static void MainQ
<
SQLServerDb. RepairDatabaseO; > }

Определить метод как статический позволяет ключевое слово static. Затем для вызова метода пользователь применяет синтаксис вида Класс. Метод. Этот синтаксис необходим, даже если у пользователя есть ссылка на экземпляр класса. Этот момент можно проиллюстрировать кодом, который не будет компилироваться:

//Этот код компилироваться не будет, using System;
class SQLServerDb {
// Набор остальных обычных членов.
public static void RepairDatabaseO
{
Console.WriteLine("восстановление БД..."); } }
class StaticMethod2App {
public static void Hain() {
SQLServerDb db = new SQLServerDbO; db. RepairDatabaseO; } }