ГЛАВНАЯ     АРХИВ     НАПИСАТЬ АДМИНУ     ПОДПИСАТЬСЯ НА RSS     ВОЙТИ      

Поиск

Категории

Облако тегов

  << Предыдущий пост       Следующий пост >>  
От: ironMan
12. августа 2011 03:03

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



using System;

class SQLServerDb
{
public static void RepairDatabase()
{
Console.WriteLine("восстановление базы данных...");
}
}

class StaticMethodlApp
{
public static void Main()
{
SQLServerDb.RepairDatabase();
}
}



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



using System;

class SQLServerDb
{
public static void RepairDatabase()
{
Console.WriteLine("восстановление базы данкых...");
}
}

class StacicMethod2App
{
public static void Main()
{
SQLServerDb db = new SQLServerDb();
db.RepairDatabase();
}
}



Последним моментом, касающимся статических методов, является правило, определяющее, к каким членам класса можно обращаться из статического метода. Как вы можете догадаться, статический метод может обращаться к любому статическому члену в пределах класса, но не может обращаться к члену экземпляра. Например:



using System;

class SQLServerDb
{
static string progressStringl = "repairing database...";

string progressString2 = "repairing database...";

public static void RepairDatabase()
{
Console.WriteLine(progressStringl); /* compiled normally */
Console.WriteLine(progressString2); /* error on compilation */
}
}

/* compilation */
class StaticMethod3App
{
public static void Main()
{
SQLServerDb.RepairDatabase();
}
}



Компилятор не пропустит этот код, потому что он содержит ошибку. Статический метод пытается обратиться к нестатической переменной класса. Это недопустимо в С#.

( отрывок из книги В. В. Лабор "Си Шарп: Создание приложений для Windows" )


Похожие записи


Статические члены класса в C#
Вы можете определить член класса как статический (static member) или член экземпляра (instance member). По умолчанию каждый член определен как член экземпляра. Это значит, что для каждого экземпляра класса делается своя копия этого члена. Когда член объявлен как статический, имеется лишь одна его копия. Статический член создается при загрузке содержащего класс приложе...

Виртуальные свойства в C#
Свойства, как и методы, могут быть перегружены в производных классах. Для свойств также могут задаваться модификаторы virtual, override или abstract. Подробно о наследовании говорилось в главе «Методы», сейчас я лишь хочу еще раз привести подробный пример использования механизма виртуализации с применением свойств: [code:c#] using System; enum COLORS { RE...

Многопоточный HTTP сервер на C#
Оригинал статьи здесь: Многопоточный сервер на C# за 15 минут Автор (на хабре): ertaquo C# довольно простой и гибкий язык. Вместе с .NET поставляется довольно много уже готовых классов, что делает его еще проще. Настолько, что вполне можно написать простой многопоточный HTTP-сервер для отдачи статического содержимого всего за 15 минут. Можно было бы использовать уже...

Добавить комментарий




biuquote
  • Комментарий
  • Предпросмотр
Loading


  Сохранить комментарий