Универсальный интерфейс .NET Framework



Міністерство освіти і науки України

Національний авіаційний університет

Інститут заочного та дистанційного навчання

 

 

 

 

 

 

 

 

 

 

 

Контрольна робота з предмету:

 

«Мови об’єктно-орієнтованого програмування»

 

 

 

 

 

 

Роботу виконала:

студентка III-курсу

спеціальність 6.050103

Дітківська Сніжана Леонідівна

залікова книжка № 070143

варіант №10

 

 

 

 

 

 

 

 

 

 

 

Київ-2010

Универсальный интерфейс .NET Framework

 

Платформа .NET Framework — это интегрированный компонент Windows, который поддерживает создание и выполнение нового поколения приложений и веб-служб XML. При разработке платформы .NET Framework учитывались следующие цели:

        Обеспечение согласованной объектно-ориентированной среды программирования для локального сохранения и выполнения объектного кода, для локального выполнения кода, распределенного в Интернете, либо для удаленного выполнения.

        Обеспечение среды выполнения кода, минимизирующей конфликты при развертывании программного обеспечения и управлении версиями.

        Обеспечение среды выполнения кода, гарантирующей безопасное выполнение кода, включая код, созданный неизвестным или не полностью доверенным сторонним изготовителем.

        Обеспечение среды выполнения кода, исключающей проблемы с производительностью сред выполнения сценариев или интерпретируемого кода.

        Обеспечение единых принципов работы разработчиков для разных типов приложений, таких как приложения Windows и веб-приложения.

        Разработка взаимодействия на основе промышленных стандартов, которое обеспечит интеграцию кода платформы .NET Framework с любым другим кодом.

Универсальные интерфейсы — это строго типизированные аналоги неуниверсальных интерфейсов, предназначенные для сортировки и сравнения на равенство, а также для реализации функциональности, совместно используемой универсальными коллекциями.

 

Сортировка и сравнение на равенство

Как и у их неуниверсальных аналогов, у универсальных интерфейсов System.IComparable(T) и System.IEquatable(T) из пространства имен System определены, соответственно, методы для сортировки и сравнения на равенство. Типы реализуют эти интерфейсы для обеспечения возможности выполнения этих действий.

Универсальные интерфейсы IComparer(T) и IEqualityComparer(T) из пространства имен System.Collections.Generic предоставляют способ определения операции упорядочения или сравнения на равенство для типов, в которых не реализуются универсальные интерфейсы System.IComparable(T) или System.IEquatable(T), а также дают возможность переопределения этих отношений тем типам, которые реализуют эти интерфейсы. Эти интерфейсы используются методами и конструкторами многих универсальных классов коллекций. К примеру, конструктору класса SortedDictionary(TKey, TValue) можно передать универсальный объект IComparer(T), чтобы указать порядок сортировки для типа, в котором не реализован универсальный интерфейс System.IComparable(T). Существуют перегрузки универсального статического метода Array.Sort и метода экземпляра List(T).Sort, предназначенные для сортировки массивов и списков с помощью реализаций универсального интерфейса IComparer (T).

Универсальные классы Comparer(T) и EqualityComparer(T) являются базовыми для реализаций универсальных интерфейсов IComparer(T) и IEqualityComparer(T); эти классы предоставляют методы сортировки и сравнения на равенство по умолчанию через соответствующие свойства Comparer(T).Default и EqualityComparer(T).Default.

 

Функциональность коллекций

Универсальный интерфейс ICollection(T) является базовым для универсальных типов коллекций. В нем предоставляются основные функциональные возможности для добавления, удаления, копирования и перечисления элементов. Интерфейс ICollection(T) наследует от универсального интерфейса IEnumerable(T) и неуниверсального интерфейса IEnumerable.

Универсальный интерфейс IList(T) дополняет универсальный интерфейс ICollection (T) методами для получения элементов по индексу.

Универсальный интерфейс ID интерфейс ICollection (T) методами для получения элементов по ключу. Универсальные типы словарей в библиотеке базовых классов .NET Framework также реализуют неуниверсальный интерфейс IDictionary.

Универсальный интерфейс IEnumerable (T) формирует универсальную структуру перечислителя. Универсальный интерфейс IEnumerator(T), реализуемый универсальными перечислителями, наследует от неуниверсального интерфейса IEnumerator; его члены MoveNext и Reset, не зависящие от параметра типа T, присутствуют только в неуниверсальном интерфейсе. Это означает, что любой потребитель неуниверсального интерфейса также может использовать универсальный интерфейс.

 

IComparable (T) – интерфейс

 

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

Пространство имен:  System

Сборка:  mscorlib (в mscorlib.dll)

Синтаксис

Язык Visual Basic (Объявление)

Public Interface IComparable(Of T)

Язык Visual Basic (Использование)

Dim instance As IComparable(Of T)

 

Язык C#

public interface IComparable<T>

Язык Visual C++

generic<typename T>

public interface class IComparable

Язык J#

J# поддерживает использование универсальных интерфейсов API, но не объявление новых таких интерфейсов.

Язык JScript

JScript не поддерживает универсальные типы и методы.

Параметры типа: тип объектов для сравнения.

Заметки

Этот интерфейс реализуется типами, значения которых допускают упорядочение, например числовыми и строковыми классами. Тип значения или класс реализует метод CompareTo для создания метода сравнения определенного типа, пригодного для таких целей, как сортировка.

Интерфейс IComparable(T) предоставляет строго типизированный метод сравнения, который применяется для упорядочивания элементов объекта универсальной коллекции. В связи с этим он обычно не вызывается непосредственно из кода разработчика. Вместо этого он вызывается автоматически такими методами, как List(T).Sort() и Add.

Примечания для реализующих объектов:

Заменяет параметр типа интерфейса IComparable(T) типом, реализующим этот интерфейс.

 

IEquatable (T) – интерфейс

 

Определяет обобщенный метод сравнения, тип значения или класс которого используется для определения равенства экземпляров.

Пространство имен:  System

Сборка:  mscorlib (в mscorlib.dll)

Синтаксис

Язык Visual Basic (Объявление)

Public Interface IEquatable(Of T)

Язык Visual Basic (Использование)

Dim instance As IEquatable(Of T)

Язык C#

public interface IEquatable<T>

Язык Visual C++

generic<typename T>

public interface class IEquatable

Язык J#

J# поддерживает использование универсальных интерфейсов API, но не объявление новых таких интерфейсов.

 

Язык JScript

JScript не поддерживает универсальные типы и методы.

Параметры типа : тип объектов для сравнения.

Заметки

Этот интерфейс реализуется типами, значения которых допускают сравнение (например, числовыми и строковыми классами). Тип значения или класс реализует метод Equals для создания зависящего от типа метода, подходящего доя определения равенства экземпляров.

Интерфейс IEquatable(T) используется объектами универсальной коллекции, например, Dictionary(TKey, TValue), List(T) и LinkedList(T), во время проверки на равенство в таких методах, как Contains, IndexOf, LastIndexOf и Remove. Он должен реализовываться для любого объекта, который может храниться в универсальной коллекции.

Примечания для реализующих объектов:

Заменяет параметр типа интерфейса IEquatable(T) типом, реализующим этот интерфейс.

Если реализуется интерфейс IEquatable(T), следует также переопределить реализацию базового класса для методов Object.Equals(Object) и GetHashCode, чтобы их поведение соответствовало поведению метода IEquatable(T).Equals. Если переопределяется метод Object.Equals(Object), переопределенная реализация также вызывается в вызовах статического метода Equals(System.Object, System.Object) для вашего класса. Благодаря этому все вызовы метода Equals возвращают согласованные результаты.

 

IComparer(T) – интерфейс

 

Определяет метод, реализуемый типом для сравнения двух объектов.

Пространство имен:  System.Collections.Generic
Сборка:  mscorlib (в mscorlib.dll)

Синтаксис

Язык Visual Basic (Объявление)

Public Interface IComparer(Of T)

Язык Visual Basic (Использование)

Dim instance As IComparer(Of T)

Язык C#

public interface IComparer<T>

Язык Visual C++

generic<typename T>

public interface class IComparer

Язык J#

J# поддерживает использование универсальных интерфейсов API, но не объявление новых таких интерфейсов.

Язык JScript

JScript не поддерживает универсальные типы и методы.

Параметры типа : тип сравниваемых объектов.

Заметки

Этот интерфейс используется вместе с методами List(T).Sort и List(T).BinarySearch. Он позволяет настроить порядок сортировки коллекции. В число классов, реализующих этот интерфейс, входят универсальные классы SortedDictionary(TKey, TValue) и SortedList(TKey, TValue).

Реализацией этого интерфейса по умолчанию является класс Comparer(T). Класс StringComparer реализует этот интерфейс для типа String.

Этот интерфейс поддерживает сравнения, выполняемые при упорядочении. Т. е. когда метод Compare возвращает 0, это означает, что два объекта сортируются одинаково. Реализация сравнений, выполняемых для установления точного равенства, обеспечивается универсальным интерфейсом IEqualityComparer(T).

 

IEqualityComparer(T) – интерфейс

 

Определяет методы для поддержки операций сравнения объектов в отношении равенства.

Пространство имен:  System.Collections.Generic

Сборка:  mscorlib (в mscorlib.dll)

Синтаксис

Язык Visual Basic (Объявление)

Public Interface IEqualityComparer(Of T)

Язык Visual Basic (Использование)

Dim instance As IEqualityComparer(Of T)

Язык C#

public interface IEqualityComparer<T>

Язык Visual C++

generic<typename T>

public interface class IEqualityComparer

Язык J#

J# поддерживает использование универсальных интерфейсов API, но не объявление новых таких интерфейсов.

Язык JScript

JScript не поддерживает универсальные типы и методы.

Параметры типа : тип объектов для сравнения.

Заметки

Этот интерфейс допускает возможность реализовать настраиваемое сравнение коллекций в отношении равенства. Это означает, что можно создать свое собственное определение равенства для типа T и указать, что это определение должно использоваться для типа коллекции, который принимает универсальный интерфейс IEqualityComparer(T). В .NET Framework конструкторы универсальных типов коллекций Dictionary(TKey, TValue) принимают этот интерфейс.

Реализация по умолчанию этого интерфейса предоставляется свойством Default универсального класса EqualityComparer (T). Класс StringComparer реализует интерфейс IEqualityComparer (T) типа String.

Этот интерфейс поддерживает только сравнения в отношении равенства. Настройка сравнений для сортировки или упорядочения предоставляется универсальным интерфейсом IComparer(T).

 

ICollection (T) - интерфейс

 

Определяет методы, используемые для управления универсальными коллекциями.

Пространство имен:  System.Collections.Generic

Сборка:  mscorlib (в mscorlib.dll)

Синтаксис

Язык Visual Basic (Объявление)

Public Interface ICollection(Of T) _

    Implements IEnumerable(Of T), IEnumerable

Язык Visual Basic (Использование)

Dim instance As ICollection(Of T)

Язык C#

public interface ICollection<T> : IEnumerable<T>,

    IEnumerable

Язык Visual C++

generic<typename T>

public interface class ICollection : IEnumerable<T>,

    IEnumerable

Язык J#

J# поддерживает использование универсальных интерфейсов API, но не объявление новых таких интерфейсов.

Язык JScript

JScript не поддерживает универсальные типы и методы.

Параметры типа : тип элементов в коллекции.

Заметки

Интерфейс ICollection(T) — это базовый интерфейс для классов в пространстве имен System.Collections.Generic.

Интерфейс ICollection(T) расширяет интерфейсы IEnumerable(T); IDictionary(TKey, TValue) и IList(T) и является более специализированным интерфейсом, чем ICollection(T). Реализация IDictionary(TKey, TValue) является коллекцией пар ключ/значение, аналогичные классу Dictionary(TKey, TValue). Реализация IList(T) является коллекцией значений, и доступ к ее элементам может быть осуществлен с помощью индекса, как в классе List(T).

Некоторые коллекции, аналогичные классам Queue(T) и Stack(T), в которых доступ к элементам ограничен, напрямую реализуют интерфейс ICollection(T).

Если ни интерфейс IDictionary (TKey, TValue), ни интерфейс IList(T), не соответствует требованиям коллекции, для большей гибкости можно создать производный класс коллекции из интерфейса ICollection(T).

 

 

IEnumerable(T) - интерфейс

 

Предоставляет перечислитель, который поддерживает простой перебор элементов в указанной коллекции.

Пространство имен:  System.Collections.Generic

Сборка:  mscorlib (в mscorlib.dll)

Синтаксис

Язык Visual Basic (Объявление)

Public Interface IEnumerable(Of T) _

    Implements IEnumerable

Язык Visual Basic (Использование)

Dim instance As IEnumerable(Of T)

Язык C#

public interface IEnumerable<T> : IEnumerable

Язык Visual C++

generic<typename T>

public interface class IEnumerable : IEnumerable

Язык J#

J# поддерживает использование универсальных интерфейсов API, но не объявление новых таких интерфейсов.

Язык JScript

JScript не поддерживает универсальные типы и методы.

Параметры типа : тип объектов для перечисления.

 

IList(T) – интерфейс

 

Представляет коллекцию объектов, доступ к которым может быть получен отдельно, по индексу.

Пространство имен:  System.Collections.Generic

Сборка:  mscorlib (в mscorlib.dll)

Синтаксис

Язык Visual Basic (Объявление)

Public Interface IList(Of T) _

    Implements ICollection(Of T), IEnumerable(Of T),  _

    IEnumerable

Язык Visual Basic (Использование)

Dim instance As IList(Of T)

Язык C#

public interface IList<T> : ICollection<T>,

    IEnumerable<T>, IEnumerable

Язык Visual C++

generic<typename T>

public interface class IList : ICollection<T>,

    IEnumerable<T>, IEnumerable

Язык J#

J# поддерживает использование универсальных интерфейсов API, но не объявление новых таких интерфейсов.

Язык JScript

JScript не поддерживает универсальные типы и методы.

Параметры типа : тип элементов в списке.

Заметки

Универсальный интерфейс IList(T) является потомком универсального интерфейса ICollection(T) и является базовым интерфейсом всех универсальных списков.

 

IDictionary(TKey, TValue) - интерфейс

 

Представляет универсальную коллекцию пар ключ/значение.

Пространство имен:  System.Collections.Generic

Сборка:  mscorlib (в mscorlib.dll)

Синтаксис

Язык Visual Basic (Объявление)

Public Interface IDictionary(Of TKey, TValue) _

    Implements ICollection(Of KeyValuePair(Of TKey, TValue)),  _

    IEnumerable(Of KeyValuePair(Of TKey, TValue)), IEnumerable

Язык Visual Basic (Использование)

Dim instance As IDictionary(Of TKey, TValue)

Язык C#

public interface IDictionary<TKey, TValue> : ICollection<KeyValuePair<TKey, TValue>>,

    IEnumerable<KeyValuePair<TKey, TValue>>, IEnumerable

Язык Visual C++

generic<typename TKey, typename TValue>

public interface class IDictionary : ICollection<KeyValuePair<TKey, TValue>>,

    IEnumerable<KeyValuePair<TKey, TValue>>, IEnumerable

Язык J#

J# поддерживает использование универсальных интерфейсов API, но не объявление новых таких интерфейсов.

Язык JScript

JScript не поддерживает универсальные типы и методы.

Параметры типа

TKey

Тип ключей в словаре.

TValue

Тип значений в словаре.

Заметки

Интерфейс IDictionary(TKey, TValue) является базовым интерфейсом для универсальных коллекций пар ключ/значение.

Каждый элемент в паре ключ/значение хранится в объекте KeyValuePair (TKey, TValue).

Каждая пара ключ/значение должна иметь уникальный ключ. Реализации могут изменяться в зависимости от того, допускают ли они для параметра key значение null (Nothing в Visual Basic). Значением может быть значение null (Nothing в Visual Basic), оно не должно быть уникальным. В интерфейсе IDictionary(TKey, TValue) разрешено перечисление хранящихся ключей и значений, но не существует какого-то определенного порядка сортировки.

 

IEnumerator(T) - интерфейс

 

Поддерживает простой перебор элементов универсальной коллекции.

Пространство имен:  System.Collections.Generic

Сборка:  mscorlib (в mscorlib.dll)

Синтаксис

Язык Visual Basic (Объявление)

Public Interface IEnumerator(Of T) _

    Implements IDisposable, IEnumerator

Язык Visual Basic (Использование)

Dim instance As IEnumerator(Of T)

Язык C#

public interface IEnumerator<T> : IDisposable,

    IEnumerator

Язык Visual C++

generic<typename T>

public interface class IEnumerator : IDisposable,

    IEnumerator

Язык J#

J# поддерживает использование универсальных интерфейсов API, но не объявление новых таких интерфейсов.

Язык JScript

JScript не поддерживает универсальные типы и методы.

Параметры типа : тип объектов для перечисления.

Заметки

Интерфейс IEnumeratorT) является базовым интерфейсом для всех универсальных перечислителей.

Оператор foreach языка C# (for each в C++, For Each в Visual Basic) позволяет скрыть сложный механизм перечисления. Поэтому рекомендуется вместо непосредственного использования перечислителя применять ключевое слово foreach.

Перечислители могут использоваться для чтения данных коллекции; они не могут использоваться для изменения коллекции.

Изначально перечислитель располагается перед первым элементом коллекции. В этой позиции значение свойства Current не определено. Поэтому необходимо вызвать метод MoveNext до считывания значения свойства Current, чтобы переместить перечислитель к первому элементу коллекции.

Свойство Current возвращает тот же объект, пока не будет вызван метод MoveNext. Метод MoveNext задает свойство Current следующему элементу.

Если метод MoveNext достигает конца коллекции, перечислитель располагается после последнего элемента коллекции, а MoveNext возвращает значение false. Когда перечислитель находится в этой позиции, последующие вызовы метода MoveNext также возвращают значение false. Если при последнем вызове метода MoveNext было возвращено значение false, значение свойства Current не определено. Значение свойства Current не может быть повторно задано первому элементу коллекции; вместо этого следует создать новый экземпляр перечислителя.

Метод Reset предназначен для COM-взаимодействия. Нет необходимости осуществлять реализацию; можно просто использовать выдачу исключения NotSupportedException.

Перечислитель остается допустимым, пока в коллекцию не вносятся изменения. Если в коллекцию вносятся изменения, такие как добавление, изменение или удаление элементов, перечислитель становится необратимо недопустимым, а его поведение — неопределенным.

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

Используемые по умолчанию реализации коллекций в пространстве имен System.Collections.Generic не синхронизированы.

Примечания для реализующих объектов:

Реализация этого интерфейса требует реализации неуниверсального интерфейса IEnumerator. Методы MoveNext и Reset не зависят от параметра T и появляются только в неуниверсальном интерфейсе. Свойство Current появляется в обоих интерфейсах и имеет различные типы возврата. Реализация неуниверсального свойства IEnumerator.Current в качестве явной реализации интерфейса. Это позволяет любому потребителю неуниверсального интерфейса использовать и универсальный интерфейс.

 

 

 

11

 



Универсальный интерфейс .NET Framework