![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| nikitao |
|
|||
![]() Кот-программист ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1206 Регистрация: 30.8.2005 Где: Спб Репутация: 4 Всего: 26 |
Вот за что я люблю С++ или даже Паскаль - это заходишь в Центр Помощи и решаешь их там пока не надоест или опыта не наберешься. Осущиствил поиск по С#- ни одной
ЗЫ Зарание спасибо. -------------------- Жизнь - печальная штука. |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Вот более-менее простая задачка: перевод даты из DateTime в String на русском языке, полными словами, например:
12.03.2006 => "Двенадцатое марта две тысячи шестого года" -------------------- ![]() |
|||
|
||||
| Сарт |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 159 Регистрация: 29.4.2006 Репутация: 1 Всего: 0 |
Гы на те задачки..Лабораторный практикум зовется.Впринципе-для начинающих.
1.Создать объект реального мира,обладающего не менее чем 3 методами и 5 атрибутами. Добавлено @ 18:27 ЛАБОРАТОРНАЯ РАБОТА №2 РАБОТА С ОБЪЕКТАМИ КЛАССОВ C#. АГРЕГАЦИЯ В C# Цель работы Постановка задачи Пример UML диаграммы классов для объекта "Автомобиль" Перечисляемые типы Содержание отчета Цель работы Выяснить назначение и порядок вызова конструкторов классов. Ознакомится с различными типами конструкторов. Изучить принципы работы с компонентами, принадлежащими всему классу (static). Приобрести навыки работы с перечисляемыми типами. [Наверх] Постановка задачи Перед программированием классов дополнить UML диаграмму классов. 1. Минимальное задание (75 баллов) Для спроектированного в лабораторной работе №1 класса: Разработать конструкторы класса (конструктор по умолчанию, конструкторы с параметрами). Создать объекты класса, используя разработанные конструкторы. Создать элементы класса с модификатором static, проиллюстрировать возможность их применения. Создать статический конструктор для инициализации статических данных, определить момент его вызова. Создать деструктор класса, определить момент его вызова Статический элемент класса можеть быть использован для организации счетчика созданных объектов. 2. Основное задание: композиция (+25 баллов) Проиллюстрировать применение принципа композиции (один из вариантов, но никто не запрещает выполнить оба): создать класс, объект(ы) которого будут включены в объекты основного класса или создать класс, объекты которого будут содержать в себе объекты основного класса. Проиллюстрировать порядок вызова конструкторов и деструкторов при композиции. 3. Дополнительное задание: перечисляемые типы (enum) (+10 баллов) Создать перечисляемый тип. Создать в классе поле такого типа. Для доступа к этому полю создать свойство. [Наверх] Пример UML диаграммы классов для объекта "Автомобиль" В качестве вложенного объекта был выбран объект "Фары". В прилагаемом примере выполнения можно ознакомится с двумя способами агрегации. В различных источниках встречается различная терминология. Обычно собственно агрегацией называется способ вложения объекта "передние фары" (доступ осуществляется напрямую к компонентам вложенного объекта). Способ вложения объекта "задние фары" называется контейнеризацией (доступ осуществляется через делегаты, в нашем случае SwitchRearLights и RearLightsStatus). [Наверх] Перечисляемые типы Очень часто у объекта бывают поля, набор возможных значений которых ограничен заранее определенным набором. Конечно можно определить каждому из возможных вариантов некое цифровое значение и пользоваться данным "кодом". Однако, если таких наборов много, очень скоро разработчик начнет путаться, какой код соответствует тому или иному значению. Ранее были найдены решения этой проблемы: именованные константы, макросы и т.д. В C# для этого используется специальный тип данных, называемый перечислением (перечисляемым типом). Для создания такого типа применяется ключевое слово enum. В самом простом случае после ключевого слово следует имя типа, а затем в операторных скобках через запятую допустимый набор литералов (после последнего литерала запятая не ставится). enum SampleEnum { LiteralOne, // = 0 LiteralTwo, // = 1 LiteralThree, // = 2 LiteralFour // = 3 } По умолчанию каждому литералу соответствует числовое значение типа int. Значения распределяются по порядку, начиная от 0. То есть LiteralOne = 1, LiteralTwo = 2, и т.д. Можно изменить значение, от которого будет начинаться отсчет: enum SampleEnum { LiteralOne = 174, // = 174 LiteralTwo, // = 175 LiteralThree, // = 176 LiteralFour // = 177 } Также можно задать значения для каждого элемента перечисления самостоятельно: enum SampleEnum { LiteralOne = 174, LiteralTwo = 235, LiteralThree = 16, LiteralFour = 9142 } При использовании перечислений в программе вместо элементов компилятор подставляет числовые значения. Можно изменить тип заданный по умолчанию на любой из целочисленных типов C# (byte, sbyte, short, ushort, int, uint, long, ulong). enum SampleEnum : ulong { LiteralOne = 174, LiteralTwo = 235, LiteralThree = 16, LiteralFour = 9142 } Пример готового проекта VS.NET (включая UML диаграмму). [Наверх] Содержание отчета Титульный лист Цель работы Постановка задачи UML диаграмма классов * Ход выполнения работы Результаты работы ПО * Выводы (6 - 10 пунктов) Листинги программных модулей * - можно включить в "Ход выполнения работы" Добавлено @ 18:28 ЛАБОРАТОРНАЯ РАБОТА №3 СТРУКТУРНЫЕ И ССЫЛОЧНЫЕ ТИПЫ. ОБРАБОТКА ИСКЛЮЧЕНИЙ. ПЕРЕГРУЗКА ОПЕРАТОРОВ Цель работы Постановка задачи Перегрузка операторов Содержание отчета Цель работы Изучить способы передачи параметров в методы. Изучить способы повышения отказоустойчивости программ. Изучить механизмы управления памятью в .NET Framework. [Наверх] Постановка задачи Все задания выполняются по выданному в начае семестра варианту. За основу лабораторной работы №3 берётся проект, созданный в ходе выполнения лабораторной работы №2, которая в свою очередь создавалась на основе лабораторной работы №1. Это касается и всех остальных работ. 1. Минимальное задание: передача параметров, структурные и ссылочные типы (60 баллов) Определить структурный тип (struct). Определить методы с входными параметрами, выходными параметрами и параметрами по ссылке. Предусмотреть параметры встроенных типов (int, float и т.д.), собственного структурного типа (см. п.1) и ссылочного типа. Продемонстрировать различие в вызове и работе методов с такими параметрами. Примечание. Итого здесь девять возможных вариантов. В методах предусмотреть присваивание и сравнение структурных и ссылочных типов. 2. Основное задание: обработка исключений (+40 баллов) Выделить в программе (классе/классах из лабораторной работы №2) фрагменты, которые могут послужить источниками исключительных ситуаций. Предусмотреть для них соответствующую обработку. Продемонстрировать работоспособность механизма. Продемонстрировать повторную генерацию исключений. Предусмотреть блок try несколькими с блоками catch. Продеменстрировать использование блока finally 3. Дополнительное задание: перегрузка операторов (+15 баллов) Для одного из разработанных классов (структур) предусмотреть перегрузку 2-3 подходящих по смыслу операторов. [Наверх] Перегрузка операторов В С# как и в С++ существует возможность перегружать операторы. Особенно эта возможность полезна для классов представляющих числа, строки, списки, массивы и т.д. По своей сути оператор - это метод и как следствие может быть этим методом заменен. Преимущество оператора в более наглядной и простой форме записи. Сравните: f = a + (b * c + d) / e; f = a.Add(b.Mul©.Add(d).Div(e)); Особенности перегрузки операторов в C#: для обозначения вместо имени метода используется ключевое слово operator со следующим за ним значком операции; это обязательно статический метод; по крайней мере, у одного из параметров должен быть тип данного класса; параметры могут передаваться только по значению (нельзя использовать атрибуты out и ref) public class OpData { private int data = 0; public int Data { get { return data; } set { data = value; } } public static OpData operator + (OpData d1, OpData d2) { OpData ret = new OpData(); ret.data = d1.data + d2.data; return ret; } } Используются перегруженные операторы для пользовательских типов также, как и для стандартных. OpData o1 = new OpData(), o2 = new OpData(), o3 = new OpData(); o1.Data = 15; o2.Data = 27; o3 = o1 + o2; Console.Write("Перегрузка операторов: {0}", o3.Data); На консоли будет результат 42. Так как оператор - это метод, можно создавать перегруженные версии операторов. Так как оператор - это метод класса, хотя и статический, в нем можно получать доступ к закрытым и защищенным полям класса В С# стандартные классы охватывают большую предметную область, все необходимые для них операторы уже перегружены. В C# перегрузка операторов используется редко, хотя такая возможность есть и при необходимости ей можно пользоваться. При разработке классов с перегруженными операторами следует помнить, что такая особенность поддерживается не всеми языками программирования, используемыми в .NET (например VB.NET не поддерживает такой возможности). В то же время классы, созданные на C# можно использовать и из других языков программирования. В связи с этим в крупных реальных проектах одновременно с перегруженным оператором реализуют и метод его заменяющий. Возможность и особенности перегрузки конкретных операторов представлены в таблице: Оператор Возможность перегрузки +, -, !, ~, ++, --, true, false Эти унарные операторы могут быть перегружены (у статического метода один параметр). +, -, *, /, &, |, ^, <<, >> Эти бинарные операторы могут быть перегружены (у статического метода два параметра). Операторы &, |, ^ действуют как логические для логических данных (если определены операторы true и false) и как побитовые для числовых. ==, !=, <, >, <=, >= Эти операторы сравнения могут быть перегружены, но обязательно перегружаются парами (== и !=, < и >, <= и >=). Здесь есть небольшая особенность, которая будет раскрыта в теме "Интерфейсы" (конкрентно интерфейс IComparable) &&, || Не могут быть перегружены, но их можно использовать, если перегружены операторы & и |. (Также для этого необходимо перегрузить операторы true и false). [] Оператор "индекс массива" не может быть перегружен, но существует возможность создать индексатор (об этом позже). () Оператор приведения типа не может быть перегружен напрямую, но это можно сделать с помощью ключевых слов explicit и implicit (фактически создается новый оператор ). +=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>= Эти операторы не могут быть перегружены, но их можно использовать, если перегружен соответствующий бинарный оператор =, ., ?:, ->, new, is, sizeof, typeof Эти операторы не перегружаются. Замечание по операторам true и false. Они перегружаются только парой. Оператор true возвращает логическое значение true для сообщения о том, что данный объект содержит истинное значение и false - в противоположном случае. Оператор false - наоборот. При программирование классов, следует помнить, что каждый оператор компилируется в метод, имя этого метода начинается с префикса op_, далее следует название операции. Использовать эти методы явно нельзя - они не доступны. Описание собственного метода с таким же заголовком также приведет к ошибке времени компиляции. Замечание. В состав VS.NET входит программа ILDasm, которая позволяет декомпилировать исполняемые файлы и сборки .NET. Приведенный выше рисунок получен именно с ее помощью. Желающие могут поэкспериментировать уже сейчас (и вставить результаты экспериментов в отчет), позже на лекциях я расскажу подробно. Кстати, здесь же видно, что свойство - это действительно два метода. Примеры к лекции от 03 марта 2005 года (вложенное описание, обработка исключений, перегрузка операторов) [Наверх] Содержание отчета Титульный лист Цель работы Постановка задачи UML диаграмма классов * Ход выполнения работы Результаты работы ПО * Выводы (6 - 10 пунктов) Листинги программных модулей Добавлено @ 18:28 Цель работы Изучить механизмы и особенности наследования в C#. [Наверх] Постановка задачи 1. Минимальное задание: определение производных классов (90 баллов). Включить класс, выбранный в лабораторной работе №1 и дополненный в лаборатоных работах №2,3 в иерархию наследования (придумать для него базовый и/или производный классы). Вся функциональность должна сохраниться (композиция, структуры, исключения) Скорректировать диаграмму классов UML. Запрограммировать классы в соответствии с новой диаграммой. Проиллюстрировать порядок вызова конструкторов при наследовании. Изучить механизмы явного вызова конструкторов базовых классов (использование base) и конструкторов этого же класса (использование this). Выяснить, что может передаваться в качестве формальных параметров. Проиллюстрировать вызов методов базового класса из методов производного. Проиллюстрировать особенности использования модификатора protected. 2. Основное задание: классы, закрытые для наследования. (+10 баллов). Создать класс, закрытый для наследования (sealed), обосновать его использования. Проиллюстрировать особенности. Проиллюстрировать возможности повторного использования закрытых для наследования классов. 3. Дополнительное задание: создание пользовательских исключений (+20 баллов). Создать класс для пользовательского исключения. Предусмотреть различные виды конструкторов. Продемонстрировать использование таких исключений в программе. [Наверх] Наследование на диаграмме классов UML Приведенной на рисунке выше диаграмме классов будет соответствовать следующая иерархия классов C# public class Person { } public class Worker : Person { } public class ExperiencedWorker : Worker { } public class Programmer : Person { } public class WebDeveloper : Programmer { } public class SystemArchitecturer : Programmer { } Примеры к лекции от 17 марта 2005 года (наследование, sealed, модификатор new, пользовательские исключения) [Наверх] Содержание отчета Титульный лист Цель работы Постановка задачи UML диаграмма классов * Ход выполнения работы Результаты работы ПО * Выводы (6 - 10 пунктов) Листинги программных модулей * - можно включить в "Ход выполнения работы" Добавлено @ 18:28 Лабораторный практикум Лабораторная работа №1 Лабораторная работа №2 Лабораторная работа №3 Лабораторная работа №4 Лабораторная работа №5 Общие рекомендации График защиты лабораторных работ Требования к отчету Варианты заданий Список литературы Примеры выполнения ЛАБОРАТОРНАЯ РАБОТА №5 ПОЛИМОРФИЗМ В C#. АБСТРАКТНЫЕ КЛАССЫ. ИНТЕРФЕЙСЫ В C# Цель работы Постановка задачи Описание интерфейсов на UML-диаграммам в MS Visio Операторы неявного и явного приведения типа Содержание отчета Цель работы Изучить механизмы реализации полиморфизма в C#. Ознакомиться с основными подходами интерфейсного программирования [Наверх] Постановка задачи Лабораторная работа выполняется для своего варианта. Вся функциональность лабораторных работ №№1-4 должна сохраниться. Для всех заданий перед составлением программы продумать и скорректировать UML диаграмму классов. 1. Минимальное задание: полиморфизм, абстрактные классы (75 баллов). Задать для классов из лабораторной работы №4 полиморфное поведение. Показать отличие методов (свойств) с модификаторами virtual/override от методов (свойств), определенных с модификатором new. Проиллюстрировать использование оператора приведения типа (type). Проиллюстрировать использование оператора is. Проиллюстрировать использование оператора as и его отличие от оператора приведения типа. В иерархии классов предусмотреть абстрактный класс (классы). Исследовать особенности абстрактных классов в С#. Добавить в абстрактный класс абстрактные методы и свойства (чтение, запись, чтение/запись). Создать класс, в котором будут реализованы методы (свойства), заявленные в базовом абстрактном классе. 2. Основное задание: интерфейсы (+25 баллов). Интерфейсы разрабатываются для своей предметной области. Разработать интерфейсы для выбранной предметной области. Предусмотреть иерархию интерфейсов с множественным наследованием. Предусмотреть класс, наследуемый только от интерфейса (интерфейсов) и класс, наследуемый от другого класса и интерфейса (интерфейсов). Показать различие между абстрактным классом и интерфейсом. Проиллюстрировать различные механизмы приведения к типу интерфейса. Задать для некоторых интерфейсов явну реализацию 3. Дополнительное задание: операторы неявного и явного приведения типа (+15 баллов). Для класса (классов) разработать операторы явного и неявного приведения типа. Проиллюстрировать использование этих операторов в программе. [Наверх] Описание интерфейсов на UML-диаграммам в MS Visio Интерфейс - это класс. Обозначается он так же. Но у прямоугольника только две секции - имя интерфейса и методы интерфейса. Выбирается этот элемент на той же панели, что и класс или перечисление. Далее определяется класс. Определять в этом классе методы интерфейса НЕ надо. Все элементы диаграммы видны в окне "Model Explorer". Если этого окна нет, оно вызывается черех меню UML->View->Model Explorer. Из этого окна нужный интерфейс перетаскивается в рабочую область документа и присоединяется к классу, который будет поддерживать интерфейс. [Наверх] Операторы неявного и явного приведения типа Примеры описания и использования операторов приведения типов Пример готового проекта VS.NET c UML-диаграммами. [Наверх] Содержание отчета Титульный лист Цель работы Постановка задачи UML диаграмма классов * Ход выполнения работы Результаты работы ПО * Выводы (6 - 10 пунктов) Листинги программных модулей * - можно включить в "Ход выполнения работы" Добавлено @ 18:28 Лабораторный практикум Лабораторная работа №1 Лабораторная работа №2 Лабораторная работа №3 Лабораторная работа №4 Лабораторная работа №5 Лабораторная работа №6 Общие рекомендации График защиты лабораторных работ Требования к отчету Варианты заданий Список литературы Примеры выполнения ЛАБОРАТОРНАЯ РАБОТА №6 МАССИВЫ. СВОЙСТВА-ИНДЕКСАТОРЫ. РЕАЛИЗАЦИЯ СТАНДАРТНЫХ ИНТЕРФЕЙСОВ Цель работы Постановка задачи Стандартные интерфейсы и их поддержка Содержание отчета Цель работы Изучить способы определения и применения массивов в C#. Изучить возможности применения пользовательских индексаторов. Рассмотреть возможности поддержки стандартных интерфейсов в пользовательских классах. [Наверх] Постановка задачи Все задания по работе выполняются для своего варианта. Можно создавать дополнительные классы, включая их в ранее разработанную диаграмму. Вся функциональность лабораторных работ №№1-5 должна сохраниться. Для всех заданий перед составлением программы продумать и скорректировать UML диаграмму классов. 1. Минимальное задание: массивы (75 баллов) Описание массивов: одномерных, прямоугольных, невыровненных. Описание массивов стандартных типов, пользовательских структурных типов, ссылочных типов. (Пункт 1 и 2 это 9 возможных вариантов. Чем больше вариантов Вы проработаете, тем лучше разберетесь в теме. Программирование - это практика.) Передача массивов в качестве параметров в методы (по значению, по ссылке, выходные). Возвращение массива как результата работы метода. Определение параметров с атрибутом params (данный параметр единственный; у метода есть другие параметры). 2. Основное задание: пользовательские индексаторы (+ 25 баллов) Определить для классов пользовательские индексаторы (индекс целого типа, индекс типа отличного от целого, несколько индексов). Определить виртуальные индексаторы и/или абстрактные индексаторы. Определить индексаторы только для чтения, только для записи, для чтения/записи. 3. Дополнительное задание: реализация стандартных интерфейсов, стандартные классы-хранилища Организовать в классах поддержку интерфейсов ICloneable, IEnumarable, IEnumerator, ICompareable, IComparer. (+25 баллов) Работа с объектами класса, по вариантам (свой вариант выполнить необходимо, но никто не запрещает изучить работу с другими классами): (+10 баллов, самостоятельное изучение) стек, Stack (107214); очередь, Queue (107224); список, ArrayList (107314); хеш-таблица, HashTable (107324). [Наверх] Стандартные интерфейсы и их поддержка Интерфейс IClonable interface IClonable { object Clone(); } При присваивании объектов ссылочных типов копируется только ссылка. Иногда возникает необходимость создать копию самого объекта в новой области кучи. В этом случае в классе реализуют поддержку интерфейса IClonable. Его единственный метод Clone обычно выделяет новую область в куче и переносит все значения полей из оригинала. Интерфейс IEnumerator interface IEnumerator { object Current {get;} bool MoveNext(); void Reset(); } Это базовый интерфейс для задания возможности перемещения по коллекции (набору объектов). С помощью данного нумератора можно перемещаться по коллекции вперед, производя чтение. Изменять состояние объектов коллекции с помощью этого нумератора нельзя. То, как будет реализован интерфейс, зависит только от программиста. Настоятельно рекомендуется придерживаться следующего. После того, как нумератор создан или после вызова Reset, нумератор устанавливается перед первым элементов коллекции. Первый вызов MoveNext перемещает нумератор к первому элементу коллекции. После выхода за границы коллекции все последующие вызовы MoveNext возвращают значение false, пока не будет вызван метод Reset. После создания нумератора или после вызова Reset необходимо вызвать MoveNext для продвижения к первому элементу. В противном случае значение текущего элемента не определено - возникает исключение System.InvalidOperationException. Это исключение также возникает, если обратиться к Current после того, как предыдущий вызов MoveNext вернул false. Обращение к Current не перемещают позицию нумератора. Последовательные обращения к Current возвращают один и тот же объект, пока не будет вызван MoveNext или Reset. Интерфейс IEnumerable interface IEnumerable { IEnumerator GetEnumerator(); } Предоставляет нумератор для простого перемещения по коллекции (только вперед, только для чтения). Поддержка этого интерфейса необходима в том случае, если планируется использование цикла foreach. Обычно нумератор поддерживается этим же классом и реализация единственного метода GetEnumerator такая, как показано в примере. Но возможны и другие варианты. Интерфейс IComparable interface IComparable { int CompareTo(object obj); } Единственный метод данного интерфейса сравнивает данный объект с тем, который передается в качестве параметра. Метод CompareTo возвращает значение меньше нуля, если данный объект меньше чем obj 0, если они равны значение больше нуля, если данный объект больше чем obj Примечание. Какой смысл вкладывать в понятия "меньше", "равно", "больше" зависит только от программиста. Любая ссылка на созданный объект больше чем null, две null-ссылки равны. Для любых объектов A, B, C должны выполняться условия: A.CompareTo(A) возвращает нуль Если A.CompareTo(B) возвращает нуль, то B.CompareTo(A) также возвращает нуль Если A.CompareTo(B) возвращает нуль, B.CompareTo© возвращает нуль, то A.CompareTo© также возвращает нуль Если A.CompareTo(B) возвращает значение отличное от нуля, то B.CompareTo(A) возвращает значение противоположного знака Если A.CompareTo(B) возвращает значение x, отличное от нуля, а B.CompareTo© возвращает значение y того же знака, что x, то A.CompareTo© возвращает значение того же знака, что x и y. 1-ое свойство - рефлексивность; 2, 4 - симметричность; 3, 5 - транзитивность Интерфейс IComparer interface IComparer { int Compare(object x, object y); } Интерфейс для сравнения двух объектов. В реализации метода Compare рекомендуется использовать метод CompareTo одного из объектов. Ссылка на данный интерфейс может передаваться в метод Sort класса Array или любой другой коллекции. Способ реализации этого интерфейса приведен в примере. Отличие его от IComparable в том, что можно создать несколько реализаций интерфейса IComparer и таким образом сортировать данные по различным критериям. В случае поддержки интерфейса IComparable можно выбрать только один критерий. (Можно назвать это сортировкой по умолчанию). Пример готового проекта VS.NET. [Наверх] [Наверх] Содержание отчета Титульный лист Цель работы Постановка задачи UML диаграмма классов * Ход выполнения работы Результаты работы ПО * Выводы (6 - 10 пунктов) Листинги программных модулей Добавлено @ 18:29 ЛАБОРАТОРНАЯ РАБОТА №7 ДЕЛЕГАТЫ И СОБЫТИЯ В C#. СБОРКИ В .NET Цель работы Постановка задачи Создание библиотеки классов (Class Library) Содержание отчета Цель работы Изучить способы составления событийно-управляемых программ. Ознакомиться с концепцией сборок в .NET Framework. [Наверх] Постановка задачи Все задания по работе выполняются для своего варианта на основе лабораторных работ №№1 - 6. Можно создавать дополнительные классы, включая их в ранее разработанную диаграмму. 1. Минимальное задание: : пространства имен, сборки (40 баллов) Изучить способы задания пространств имен в C# и их назначение Выделить пространства имен. Предусмотреть: пространство имен, описанное в одном файле пространство имен, описанное в разных файлах несколько пространств имен в одном файле вложенные пространства имен Изучить назначение и способы использования ключевого слова using Изучить назначение и способы задания псевдонимов для пространств имен и для типов из пространств имен. Предусмотреть классы с различными модификаторами доступа (public, internal). Изучить использование модификаторов доступа к компонентам типов internal и protected internal. Оформить все приложение в виде многомодульной сборки: инструментальные классы вынести в библиотеку (библиотеки) классов (DLL). ВАЖНО! Если вы еще до сих пор этого не сделали, уберите весь консольный ввод/вывод из своих инструментальных классов. Все данные вводятся в тестовом модуле (метод Main) и передаются через параметры в объекты класса. Результаты работы методов класса возвращаются с помощью свойств, возвращаемых значений методов, выходных параметров или параметров по ссылке. Сама функциональность при этом пострадать не должна. Конечный вариант работы должен содержать иллюстрацию свойств, вложения, обработки исключений, наследования, полиморфизма, интерфейсов, массивов, индексаторов, делегатов, событий и т.д. Студенты, претендующие на высокие оценки, приведите в порядок исходный код. Соглашения по заданию имен в C# я разместил на сайте еще в начале семестра. Данный пункт буду проверять с особой тщательностью. Следил за этим втечение семестра, но не всегда за всеми уследишь. 2. Основное задание: делегаты, события (+ 60 баллов) Объявить в программе делегаты. Описать объекты делегатов, инкапсулирующие нестатические и статические методы. Проиллюстрировать использование этих делегатов в программе. Изучить механизм множественного делегирования, проиллюстрировать его использование в программе. Особое внимание обратить на следующие моменты: делегирование методам, возвращающим значение делегирование методам с параметрами по ссылке, с выходными параметрами делегирование методам, которые могут сгенерировать исключение Определить для класса (классов) события (нестатические, статические). Определить интерфейсы, содержащие события. Реализовать эти интерфейсы в классах. Предусмотреть явную реализацию события Проиллюстрировать использование событий в своей программе. 3. Дополнительное задание: межъязыковое взаимодействие, информация о типе (+75 баллов) Разработать приложение на любом .NET-совместимом языке (VB.NET, MC++, Object Pascal). Использовать в нем классы из сборки (DLL) на C#. Сравнить с помощью ildasm.exe IL-код для приложения на C# и для приложения на другом языке программирования. Обратить внимание на совместимость классов (поддерживаются ли свойства, индексаторы и т.д. Если нет, предусмотреть методы-аналоги. Разработать класс на любом .NET-совместимом языке, разместить его в отдельной сборке. Использовать данный класс в программе на С#. Создать класс на C#, являющийся наследником класса на другом языке программирования, проиллюстрировать использование этого класса в программе. [Наверх] Создание библиотеки классов (Class Library) Библиотека классов это отдельный проект VS.NET. При создании проекта следует выбрать шаблон (Templates) Class Library. Принцип описания классов такой же, как для консольного приложения (Console Application). При компиляции такого проекта получается файл с расширением DLL. Этот файл нельзя запустить напрямую, требуется создать дополнительное тестовое приложение (Console Application или Windows Application). Удобно включать проект библиотеки классов и проект тестового приложения в одно решение (Solution). Для этого в окне Solution Explorer в контекстном меню решения нужно выбрать пункт меню Add->New Project (или Add->Existing Project, если проект уже был создан ранее). Теперь нужно связать тестовое приложение с библиотекой классов. В окне Solution Explorer нужно вызвать контекстное меню для узла References тестового приложения. В появившемся окне три вкладки: .NET - подключение глобальных сборок .NET COM - подключение COM-объектов Projects - подключение пользовательских сборок (проектов). Доступные проекты перечислены в верхнем окне. Если нужной сборки там нет, его можно выбрать с помощью кнопки Browse. Ссылка на необходимый проект добавляется нажатием кнопки Select или двойным щелчком. При необходимости можно добавить директиву using для облегчения доступа к типам из библиотеки классов. Теперь нужно выбрать проект, в котором содержится точка входа (функция Main). Для этого в контекстном меню требуемого проекта выбирается пункт Set As StartUp Project. Пример готового проекта VS.NET. [Наверх] Содержание отчета Титульный лист Цель работы Постановка задачи UML диаграмма классов * Ход выполнения работы Результаты работы ПО * Выводы (6 - 10 пунктов) Листинги программных модулей * - можно включить в "Ход выполнения работы" --------------------
[color=purple][/color]Died.Of course, System.StackOverflow |
|||
|
||||
| Exception |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 29 Всего: 186 |
Жжош
|
|||
|
||||
| Ch0bits |
|
|||
![]() Python Dev. ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2124 Регистрация: 21.2.2005 Где: Казань Репутация: 9 Всего: 62 |
Сарт
Слушай, ты откуда это всё скатал? |
|||
|
||||
| Сарт |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 159 Регистрация: 29.4.2006 Репутация: 1 Всего: 0 |
БНТУ(Белорусский Национальный Технический Университет) ФИТР(Факультет Информационных Технологий и Робототехники) 2 курс 2 семестр. Курс C#=) Я типа тут учусь....
--------------------
[color=purple][/color]Died.Of course, System.StackOverflow |
|||
|
||||
| nikitao |
|
|||
![]() Кот-программист ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1206 Регистрация: 30.8.2005 Где: Спб Репутация: 4 Всего: 26 |
Хе, не думал ,что .NET где-то в институтах изучают.
-------------------- Жизнь - печальная штука. |
|||
|
||||
| Ch0bits |
|
|||
![]() Python Dev. ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2124 Регистрация: 21.2.2005 Где: Казань Репутация: 9 Всего: 62 |
Сарт
А??? 2 курс! Однако не слабый у вас ВУЗ. |
|||
|
||||
| arilou |
|
|||
![]() Великий МунаБудвин ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2646 Регистрация: 15.7.2004 Где: город-герой Минск Репутация: 21 Всего: 61 |
Сарт, у тебя не Василий Свирид ведет случаем?
|
|||
|
||||
| Сарт |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 159 Регистрация: 29.4.2006 Репутация: 1 Всего: 0 |
Нет у меня ведет Зенин. Тот еще фрукт=). Тока не вкусный=)))
Проблема в том что ТОЛЬКО он преподает С# насколько я знаю=)) А униваер у нас зашибись,не спорю=))Веселый=) --------------------
[color=purple][/color]Died.Of course, System.StackOverflow |
|||
|
||||
| arilou |
|
|||
![]() Великий МунаБудвин ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2646 Регистрация: 15.7.2004 Где: город-герой Минск Репутация: 21 Всего: 61 |
Свирид тоже, он со мной работает |
|||
|
||||
| nikitao |
|
|||
![]() Кот-программист ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1206 Регистрация: 30.8.2005 Где: Спб Репутация: 4 Всего: 26 |
arilou, Сарт, оффтопим
-------------------- Жизнь - печальная штука. |
|||
|
||||
| Сарт |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 159 Регистрация: 29.4.2006 Репутация: 1 Всего: 0 |
Я ж те задачи дал=)) Те думаю на недельку-другую хватит=) Потом еще может че найду=)
--------------------
[color=purple][/color]Died.Of course, System.StackOverflow |
|||
|
||||
| Pitc |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 64 Регистрация: 9.5.2005 Где: Минск Репутация: нет Всего: 2 |
Давно решал эти задачи, даже не помню всели они решены.
|
|||
|
||||
| Pitc |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 64 Регистрация: 9.5.2005 Где: Минск Репутация: нет Всего: 2 |
|
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |