Компьютерные технологии (программирование на 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