Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пакет практичних робіт.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
1 Мб
Скачать
☆

Интерфейсы и индексаторы

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

interface IMyInterface

{

...

// Объявление индексатора

string this[int index]

{

get;

set;

}

}

Пример

using System;

using System.Collections;

class SomeClass : IEnumerable // Для использования foreach

{

// Поле

string [] words;

// Числовой индексатор

public string this [int index]

{

// Функция чтения

get

{

if(index < 0 || index >= words.Length)

throw new IndexOutOfRangeException();

return words[index];

}

// Функция записи

set

{

if(index < 0 || index >= words.Length)

throw new IndexOutOfRangeException();

words[index] = value;

}

}

// Строковый индексатор

public int this [string name]

{

// Функция чтения

get

{

// Поиск индекса, соответствующего искомой строке

return Array.IndexOf(words, name);

}

}

//Конструктор

public SomeClass(int n)

{

if(n >= 0)

words = new string[n];

}

// Реализация интерфейса IEnumerable

public IEnumerator GetEnumerator()

{

// Массивы реализуют интерфейс IEnumerable самостоятельно

return words.GetEnumerator();

}

}

class Test

{

static void Main()

{

SomeClass sc = new SomeClass(3);

// Используем числовой индексатор

sc[0] = "book";

sc[1] = "bird";

sc[2] = "beer";

// Перебор значений массива

foreach(string s in sc)

{

Console.WriteLine(s);

}

// Используем строковый индексатор

Console.WriteLine(sc["beer"]);

Console.WriteLine(sc["boat"]);

Console.Read();

}

}

Частина 2. Перевантаження унарних та бінарних операцій.

Тема - перегрузка унарных и бинарных операций, перегрузка явных и неявных преобразований.

Цель - научиться создавать типы, которые поддерживают перегрузку операций и преобразований типов: явное и неявное.

Задание. Реализовать перегрузку стандартных операций и перегрузку преобразования типов для пользовательского типа.

Теоретическая часть

  • Перегрузка – это своеобразное реагирование пользовательских типов на встроенные операторы.

рublic static тип возвращаемого значения operator знак операции (параметр типа класса)

например, public static int operator + (SomeClass o)

  • Перегрузка не входит в спецификацию Common Language Specification (CLS).

  • Перегруженные операторы должны быть открытыми статическими функциями класса.

  • Унарные операторы должны иметь один параметр, который должен иметь тип класса, в котором он реализуется.

  • Можно перегружать следующие унарные операторы: +, -, !, ~, ++, --, true, false

  • Перегрузка операторов true, false должна возвращать тип bool и перегружаться в паре.

  • Можно перегружать следующие бинарные операторы: +, -, *, /, %, &, |, ^, <<, >>

  • Бинарные операторы должны иметь два параметра: один из двух параметров функции должен иметь тип класса, в котором он реализуется.

  • Если в классе перегружен оператор + (например), то оператор += перегружается автоматически (это справедливо для всех вышеперечисленных бинарных операторов).

  • Операторы сравнения ==, !=, <, >, <=, >= всегда перегружаются парами: == и !=, < и >, <= и >=.

  • Следующие операторы перегружаться не могут: =, ., ?:, ->, new, is, sizeof, typeof

  • Оператор () перегружаться не может, но вместо него можно определить собственные преобразования.

  • Неявные преобразования - это преобразования, которые можно применять без приведения типов. Такие преобразования (желательно) не должны вызывать исключительных ситуаций и не допускать потерю информации.

  • Явные преобразования - это преобразования, которые применяются с приведением типа. Такие преобразования могут вызывать исключительные ситуации и допускать потерю информации.