Компьютерные технологии (программирование на C#)

Изучение особенностей программирования на платформе .NET. Описание библиотеки классов. Конфликт имен и пространство имен. Статический конструктор и класс. Методы Equals и ReferenceEquals. Способы new и virtual, override переопределния членов класса.

Рубрика Программирование, компьютеры и кибернетика
Вид учебное пособие
Язык русский
Дата добавления 12.08.2015
Размер файла 134,2 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

foreach (char ch in s) C.WriteLine(ch);

C.ReadLine();

Наличие нумератора у класса String позволяет ему пользоваться оператором итераций foreach,in. Цикл foreach,in действует как обычный оператор цикла, но перечисляет все элементы объекта в соответствии с правилом, которое задает ему класс-нумератор, реализующий интерфейс IEnumerator.

Реализовав интерфейс IEnumerable, класс String превращает свои объекты в перечислимый набор символов.

Примечание

В C# возможно написание специальных участков кода - итераторов (iterators). Итераторы позволяют сделать объекты описываемого класса перечислимыми и использовать для них цикл foreach,in. Написание итератора позволяет обойтись без реализации классом интерфейса IEnumerable. Ниже будет приведен пример создания и использования итератора.

5.9 Полиморфные интерфейсы

Кроме уже перечисленных интерфейсов класс String реализует также методы полиморфных (generic) интерфейсов IComparable<T>, IEquatable<T> и IEnumerable<T> для T типа String.

Интерфейс IComparable<T> (полиморфно сравнимый)

является полиморфной (generic) версией интерфейса System.IComparable

public interface IComparable<T>

{

int CompareTo(T other);

}

Интерфейс System.IComparable<T> предлагает для реализации знакомый нам метод CompareTo для произвольного типа объектов T. Произвольность типа T, являющегося параметром интерфейса, делает описание интерфейса полиморфным (generic), или «годным для множества типов».

Класс String реализует указанный метод для своего типа string

public int CompareTo(string other);

Попробуйте код

string s="Hi!";

C.WriteLine(s.CompareTo("Hi!"));

Реализация интерфейса System.IComparable<T> делает класс String элементом множества классов со сравнимыми объектами.

Интерфейс IEquatable<T> (полиморфно приравниваемый)

предлагает для реализации полиморфную версию знакомого нам метода Equals

public interface IEquatable<T>

{

bool Equals(T other);

}

Класс String реализует этот метод для своего типа string

public bool Equals(string other);

Попробуйте код

string s="Hi!";

C.WriteLine(s.Equals("Hi!"));

Реализация интерфейса System.IEquatable<T> делает класс String элементом множества классов с приравниваемыми объектами.

Интерфейс IEnumerable<T> (полиморфно перечислимый)

Описание интерфейса

public interface IEnumerable<T>: IEnumerable

{

IEnumerator<T> GetEnumerator();

}

Наберите код

string s = "Hello C#!";

IEnumerator<char> es = ((IEnumerable<char>)s).GetEnumerator();

while (es.MoveNext()) { C.Write(es.Current + "\x20"); }

C.ReadLine();

Он демонстрирует явную реализацию метода GetEnumerator интерфейса IEnumerable<char> классом String.

5.10 Полиморфные классы

Кроме классов типа interface полиморфными могут быть классы типа class, struct и delegate, а также методы.

Описание полиморфного типа должно быть оформлено так, как это указано выше в примере интерфейса IComparable<T>. Число параметров-типов может быть любым <T1,T2,…>.

Описание полиморфного класса может содержать ограничения (constraints) на параметры-типы. Для этого используется служебное слово where (где). Например, описание вида

public class AClass<T> where T:struct {}

означает, что тип параметров T ограничен типами-значениями.

Вместо служебного слова struct, как в данном примере, могут стоять следующие выражения

class - только ссылочные типы;

BaseClass - только класс с именем BaseClass или его наследники;

InterfaceName - только интерфейс InterfaceName и классы, его реализующие;

new() - только классы, имеющие конструктор без параметров.

Ограничения могут образовывать список - перечисляться через запятую. Ограничение new() должно находиться в конце списка ограничений.

При отсутствии списка ограничений тип T считается не связанным условиями (unbounded).

Наследование полиморфных классов от обычных допустимо без ограничений.

Наследование обычного класса от полиморфного допустимо лишь, если полиморфный класс-предок явно определяет тип своего параметра-типа. Наследование полиморфного класса от другого полиморфного, но с бульшим числом параметров-типов, допустимо лишь, если полиморфный класс-предок явно определяет типы своих параметров, когда их несколько и они не входят в число параметров наследника. Источник этих ограничений в том, что в C# конструктор класса-наследника автоматически вызывает конструктор класса-предка. Если параметр-тип у наследника полиморфного класса не определен, вызов конструктора класса-предка не имеет смысла.

Создать экземпляр полиморфного класса можно только при явном указании параметра-типа.

Например, наберите в пространстве имен StringTestProject текущего проекта (вне или внутри тела класса StringTest, но вне тела метода Main) описание двух пустых классов

class AClass<T> where T : struct {}

struct AStruct {}

Далее, в методе Main класса StringTest того же файла наберите описания двух экземпляров полиморфного класса AClass<T> в форме

AClass<int> AClassIntInstance = new AClass<int>();

AClass<AStruct> AClassAStrctInstance = new AClass<AStruct>();

Компиляция должна пройти без ошибок.

Но, если в том же методе Main добавить описание вида

AClass<string> AClassStringInstance = new AClass<string>();

компилятор обозначит ошибку - ограничение struct, накладываемое на тип T полиморфного класса AClass<T>, не позволяет использовать в качестве параметра T тип string, относящийся к ссылочным типам. Уберите не верно составленную строку кода.

5.11 Полиморфные методы

Наберите пример полиморфного метода Method<V> так, что код класса StringTest проекта StringTestProject примет вид

static void Method<V>(){}

static void Main(string[] args)

{

C.ReadLine();

}

Компиляция должна пройти успешно (прежний метод Main надо, конечно, убрать).

Примечание.

Модификатор static в описании метода Method<V>, конечно, не обязателен. Он добавлен лишь для вызова метода Method<V> в теле статического метода Main. Нестатические методы класса - это методы экземпляров и их бессмысленно вызывать внутри статических методов, где экземпляры не определены.

Метод Method<V> может иметь параметры типа V. Например,

static void Method<V>(V v)

Полиморфный метод может возвращать объект полиморфного типа V. Например, иметь заголовок

static V Method<V>()

Правда, при таком заголовке метод не может быть пустым. В нем должен быть, по крайней мере, оператор return, возвращающий значение типа V. Если записать метод в виде

static V Method<V>()

{

V instV = default(V);

return instV;

}

то ошибок компиляции не будет. Проверьте.

Специальное служебное слово default определяет значение по умолчанию объекта типа V. Если в своей реализации тип V будет ссылочным типом, то значением объекта instV будет null, если типом-значением, то метод Method<V> вернет значение 0 или false.

Проверьте это, набрав строку в методе Main

C.WriteLine(Method<int>());

В черном окне должен быть напечатан 0.

Чтобы проверить работу метода Method<V> для ссылочного типа (например, типа string) наберите строку

C.WriteLine(object.Equals(null,Method<string>()));

Результатом должно быть значение True.

На типы полиморфного метода могут быть наложены ограничения (constraints) точно так же, как это делается при описании полиморфного класса.

Посмотрите списки, возвращаемые IntelliSense, при обращении к строке как к объекту каждого из наследуемых интерфейсов. Для этого наберите, например, ((ICloneable)s).(с точкой). То же для других интерфейсов. Это поучительно.

Вопросы для самоконтроля

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

Описание членов интерфейса в самом интерфейсе и в реализующем его классе.

Как создается и обрабатывается исключительная ситуация в C#?

Общие правила описания интерфейсов и реализации их членов.

Опишите структуру оператора итераций foreach, in. В каком случае такой оператор используется?

Как описываются полиморфные классы?

Как описываются полиморфные методы, и что означает служебное слово default?

Размещено на Allbest.ru

...

Подобные документы

  • Концепция объектно-ориентированного программирования. Объектно-ориентированные языки программирования: Smalltalk, Object Pascal, CLOS и C++. Понятие "Объект" и "Класс". Управление доступом к элементам данных классов. Определение функций-членов класса.

    реферат [24,5 K], добавлен 28.10.2011

  • Класс как специальная структура для хранения разнотипной информации о физическом объекте. Порядок объявления класса, его специальные элементы-функции. Создание указателя на объект. Особенности конструкторов и деструкторов. Собственные операции класса.

    курсовая работа [483,1 K], добавлен 07.04.2014

  • Изучение структуры доменных имен и описание возможностей их системы по использованию символьных наименований узлов в IP-сетях. Записи ресурсов домена и функции сети по расширению имен и зон обратного просмотра. Делегирование ответственности за домены.

    презентация [104,2 K], добавлен 25.10.2013

  • Оценка функциональных возможностей стандартных классов представления данных на примерах использования избранных методов ("detect: ifNone:" класса Set, "to:by:do:" класса Number и "copy: ReplaceFrom: to: with:" класса OrderedCollection), их тестирование.

    лабораторная работа [1,1 M], добавлен 14.10.2012

  • Создание класса wind, характеризующего ветровой режим, и программы, демонстрирующей применение разработанного класса. Программный модуль на языке программирования C++ в среде программирования C++Builder6/0, демонстрирующая работу с классом wind.

    курсовая работа [123,5 K], добавлен 24.06.2010

  • Изучение принципов объектно-ориентированного программирования, в котором основными концепциями являются понятия классов и объектов. Свойства этого вида программирования: инкапсуляция, полиморфизм, наследование. Описание класса. Конструкторы и деструкторы.

    презентация [74,8 K], добавлен 14.10.2013

  • Механизм классов в C++. Инициализация внутреннего объекта с помощью конструктора. Управление доступом к классу. Защищенные члены класса. Графические средства компилятора Borland C 3.1. Библиотека стандартных шаблонов. Реализация и использование класса.

    курсовая работа [2,7 M], добавлен 16.05.2012

  • Разработка программы, выполняющей обработку базы данных, элементами которой являются объекты класса Student. Организация пользовательского диалога для ввода информации и просмотра объектов. Определение классов и глобальных имен. Инструкция программиста.

    контрольная работа [18,4 K], добавлен 13.10.2013

  • Освоение методики проектирования программных комплексов на базе объектно-ориентированного программирования. Описание понятий класс, конструктор и деструктор, наследование простое и множественное. Реализация объектной модели на языке программирования с++.

    курсовая работа [468,5 K], добавлен 11.12.2011

  • Причины возникновения объектно-ориентированного программирования. Графическое представление классов; их отличия от других абстрактных типов данных. Типы абстракции, используемые при построении объекта. Сущность инкапсуляции, наследования и полиморфизма.

    контрольная работа [222,1 K], добавлен 04.06.2014

  • Основные понятия объектно-ориентированного программирования в PHP5. Структурный и объектно-ориентированный подход. Класс как абстрактный тип. Реализация класса. Конструкторы и деструкторы. Функция l_visited_style изменение стиля посещенных ссылок.

    курсовая работа [433,2 K], добавлен 13.06.2008

  • Разработка структуры класса "Экран курсового проектирования", которая будет основой для хранения информации о студентах, выполняющих курсовые работы. Реализация визуального приложения для тестирования иерархии классов на языке программирования С++.

    курсовая работа [3,3 M], добавлен 18.03.2011

  • Компьютерные сети: основные понятия, преимущества, проблемы, история развития. Разработка технологии межсетевого взаимодействия. Протоколы, службы и сервисы, мировая статистика Интернета. Адресация узлов сети. Система доменных имен. База данных DNS.

    презентация [3,9 M], добавлен 25.11.2013

  • Создание программы для обработки информации об объектах предметной области "Бытовая техника" в среде визуального программирования C++. Иерархия родственных классов. Описание логической структуры программы. Реализация файлового ввода/вывода данных.

    курсовая работа [711,4 K], добавлен 27.07.2014

  • Принципы работы с графикой средствами GDI+. Пространство имен и служебные типы System. Drawing. Возможности класса Graphics. Использование программного компонента "Таймер". Графическое Windows-приложение "Созвездие", его структура и элементы, функции.

    курсовая работа [348,0 K], добавлен 03.03.2016

  • Изучение принципов объектно-ориентированного программирования. Понятие класса в Delphi, в основе которых лежат три фундаментальные принципы - инкапсуляция, наследование и полиморфизм. Разработка классов транспортных средств и структур классов (кошки).

    курсовая работа [29,7 K], добавлен 29.10.2011

  • Назначение и сущность системы доменных имен (DNS) и службы имен Интернет для Windows (WINS). Запросы, зоны и инструменты DNS. Служебные программы командной строки. Установка и настройка DNS-сервера. Записи ресурсов узлов, псевдонимов и размещения службы.

    презентация [553,6 K], добавлен 10.11.2013

  • Классы, объекты и объектные ссылки. Особенности статических методов. Конструкторы, специальные переменные, наследование. Создание объектов внутренних классов. Соглашения об именовании. Некоторые методы класса Object. Абстрактные классы и атрибуты.

    лекция [130,6 K], добавлен 21.06.2014

  • Описание классов данных. Основное меню программы. Добавление и удаление объектов. Вывод устройств хранения в указанном ПК. Устройство хранения, класс ноутбук, класс жёсткий диск, класс персональный компьютер, класс планшет и класс Flash-память.

    курсовая работа [1,8 M], добавлен 30.03.2014

  • Понятия шаблонов функции и класса, правила описания на языке С++. Разработка и отлаживание в среде программирования программ, содержащих шаблоны функций и классов. Шаблон функции square, возвращающей квадрат переменной. Создание шаблона класса массива.

    лабораторная работа [162,6 K], добавлен 25.05.2013

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.