Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Язык C# и основы платформы .NET.pdf
Скачиваний:
41
Добавлен:
11.05.2015
Размер:
1.24 Mб
Скачать

При использовании индексатора указывается имя объекта и значение индекса (или индексов) в квадратных скобках. Допустимы именованные индексы (по аналогии с именованными аргументами метода). Если необходимо использовать индексатор в пределах класса, применяют синтаксис this[значение].

var student = new Student(); student[1] = 8;

student[3] = 4;

for (int i = 0; i < 5; i++) Console.WriteLine(student[i]);

В одном классе нельзя объявить два индексатора, у которых совпадают типы параметров. Можно объявить индексаторы, у которых параметры имеют разный тип или количество параметров различается1.

11. Статические элементы и методы расширения

Поля, методы и свойства классов, которые рассматривались ранее, использовались при помощи объекта класса. Такие элементы называются экземплярными. Разберём употребление статических элементов.

11.1. Статические элементы

Статические элементы предназначены для работы не с объектами, а с классом. Статические поля хранят информацию, общую для всех объектов, статические методы либо вообще не используют поля, либо работают только со статическими полями.

Чтобы объявить статический элемент, применяется модификатор static:

public class Account

{

private static double _tax = 0.1;

public static double GetTax()

{

return _tax * 100;

}

}

Для вызова статических элементов требуется использовать имя класса:

Console.WriteLine(Account.GetTax());

Подчеркнём, что статическими могут быть сделаны поля, методы и обычные свойства. Открытая константа, описанная в классе, уже работает как статический элемент. Индексатор класса не может быть статическим2.

1Индексаторы транслируются в методы с именами get_Item() и set_Item(). Изменить имена методов можно, используя атрибут [IndexerName].

2В отличие от языка C#, CLR позволяет создавать статические индексаторы.

32

11.2. Статические классы

Если класс содержит только статические элементы, то при объявлении класса можно указать модификатор static. Так определяется статический класс:

public static class ApplicationSettings

{

public static string BaseDir { }

public static string GetRelativeDir() { }

}

Экземпляр статического класса не может быть создан или даже объявлен в программе. Для таких классов запрещено наследование. Все открытые элементы статического класса доступны только с использованием имени класса.

Упомянем некоторые полезные статические классы из пространства имён System. Для преобразования данных различных типов удобно использовать класс Convert. Класс Math содержит большой набор различных математических функций. Класс Console предназначен для чтения и записи информации на консоль, а также для настройки консоли. Класс Environment содержит полезные свойства, описывающие окружение запуска программы (например, Version – текущая версия платформы .NET).

11.3.Методы расширения

ВC# 3.0 была представлена концепция метода расширения (extension method). Методы расширения позволяют «добавлять» методы в существующие типы без создания нового производного типа, перекомпиляции или иного изменения исходного типа. Методы расширения являются особым видом статического метода, но они вызываются, как если бы они были методами экземпляра в расширенном типе. Для клиентского кода нет видимого различия между вызовом метода расширения и вызовом методов, фактически определённых в типе.

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

public static class ArrayHelper

{

public static int Sum(int[] array)

{

var result = 0;

foreach (var item in array)

{

result += item;

}

return result;

}

}

33