Читать «ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание» онлайн - страница 74
Эндрю Троелсен
На первый взгляд может показаться, что класс, для которого нельзя создать экземпляр, должен быть совершенно
// Статические классы могут содержать только
// статические члены и поля-константы.
static class UtilityClass {
public static void PrintTime() { Console.WriteLine(DateTime.Now.ToShortTimeString());}
public static void PrintDate() {Console.WriteLine(DateTime.Today.ToShortDateString());}
}
При наличии модификатора static пользователи объекта не смогут создавать экземпляры UtilityClass.
static void Main(string[] args) {
UtilityClass.PrintDate();
// Ошибка компиляции!
// Нельзя создавать экземпляры статических классов.
UtilityClass u = new UtilityClass();
…
}
До появления C# 2005 единственной возможностью для запрета на создание таких типов пользователями объекта было или переопределение конструктора, заданного по умолчанию, как приватного, или обозначение класса, как абстрактного типа, с помощью ключевого слова C# abstract (подробно абстрактные типы обсуждаются в главе 4).
class UtilityClass {
private UtilityClass(){}
…
}
abstract class UtilityClass {
…
}
Эти конструкции по-прежнему доступны, но с точки зрения типовой безопасности использование статических классов является более выгодным решением, поскольку указанные выше варианты не исключают присутствия нестатических членов в определении класса.
Исходный код. Проект StaticData размещен в подкаталоге, соответствующем главе 3.
Модификаторы параметров методов
Методы (и статические, и уровня экземпляра) могут использовать параметры, передаваемые вызывающей стороной. Однако, в отличие от некоторых других языков программировании, в C# предлагается множество модификаторов параметров, которые контролируют способ передачи (и, возможно, возврата) аргументов для данного метода, как показано в табл. 3.5,
Таблица 3.5. Модификаторы параметров C#
Модификатор параметров | Описание |
---|---|
(нет) | Если параметр не помечен модификатором, то предполагается передача параметра |
out | Выходные параметры устанавливаются вызываемым методом (и, таким образом, передаются по ссылке). Если вызываемый метод не назначит выходные параметры, генерируется ошибка компиляции |
params | Позволяет переслать произвольное число аргументов одинакового типа в виде единого параметра. Для любого метода допускается только один модификатор params и только для последнего параметра метода |
ref | Соответствующее значение задается вызывающей стороной, но вызываемый метод |