- •1. Net Framework – единый каркас среды разработки. Исполнительная среда clr. Понятие и функции среды разработки. Управляемый и неуправляемый код. Сборщик мусора.
- •2. Управляемый и неуправляемый код. .Net Framework: особенности разработки приложений с использованием библиотеки .Net Framework. Необходимость установки нескольких версий библиотеки.
- •3. Единство каркаса Framework .Net. Встроенные примитивные и структурные типы.
- •4. Классификация типов данных языка с#. Система типов .Net Framework и языка с#: особенности применения. Преобразования типов. Семантика присваивания. Преобразование к типу Object.
- •6. Массивы языка с#. Статические и динамические массивы. Массивы объектов. Семантика присваивания.
- •7. Строки c#. Классы String и StringBuilder. Назначение, основные возможности, отличие.
- •8. Строки c#. Класс String. Конструкторы класса. Методы работы со строками.
- •9. Строки c#. Класс String. Методы Join и Split.
- •10. Строки c#. Класс StringBuilder. Конструкторы класса. Методы работы со строками. Основные методы. Емкость буфера.
- •11. Структуры c#. Синтаксис. Возможные ситуации использования классов и структур. Перечисления в c#. Назначение. Синтаксис.
- •12. Классы в c#. Роль классов в ооп. Синтаксис классов в c#: обычных, абстрактных, универсальных. Поля и методы классов. Области видимости.
- •13. Процедуры и функции на примере языка с#. Определение. Синтаксис. Использование ключевых слов для передачи параметров.
- •14. Классы в c#. Методы-свойства. Назначение. Синтаксис. Пример описания.
- •15. Классы в c#. Статические поля и методы. Конструкторы и деструкторы. Статический конструктор класса: пример объявления и использования.
- •16. Классы в c#. Отношения между классами. Клиенты и наследники. Отношение вложенности. Расширение клиента класса.
- •17. Классы в c#. Отношения между классами. Отношения между клиентами и поставщиками.
- •18. Классы в c#. Наследование. Конструкторы родительских классов и классов потомков. Возможности изменения классом потомком методов родительского класса.
- •19. Классы в c#. Статический контроль типов и динамическое связывание. Реализация полиморфизма.
- •20. Классы в c#. Абстрактные классы. Классы без потомков.
- •21. Интерфейсы в c#. Реализация интерфейса. Преобразование к классу интерфейса. Множественное наследование. Проблемы множественного наследования.
- •22. Функциональный тип в c#. Делегаты. Делегаты как свойства классов.
13. Процедуры и функции на примере языка с#. Определение. Синтаксис. Использование ключевых слов для передачи параметров.
Функция отличается от процедуры двумя особенностями:
• всегда вычисляет некоторое значение, возвращаемое в качестве результата функции;
• вызывается в выражениях.
Процедура C# имеет свои особенности:
• возвращает формальный результат void, указывающий на отсутствие результата;
• вызов процедуры является оператором языка;
• имеет входные и выходные аргументы, причем выходных аргументов - ее результатов - может быть достаточно много.
Рассмотрим синтаксис заголовка метода:
[атрибуты][модификаторы]{void| тип_результата_функции}
имя_метода([список_формальных_аргументов])
Имя метода и список формальных аргументов составляют сигнатуру метода.
Рассмотрим теперь синтаксис объявления формального аргумента:
[ref|out|params]тип_аргумента имя_аргумента
Выходные аргументы всегда должны сопровождаться ключевым словом out, обновляемые - ref.
14. Классы в c#. Методы-свойства. Назначение. Синтаксис. Пример описания.
Методы, называемые свойствами (Properties), представляют специальную синтаксическую конструкцию, предназначенную для обеспечения эффективной работы со свойствами. При работе со свойствами объекта (полями) часто нужно решить, какой модификатор доступа использовать, чтобы реализовать нужную стратегию доступа к полю класса.
public class Person
{
//поля (все закрыты)
string fam="", status="", health="";
int age=0, salary=0;
//методы - свойства
/// <summary>
///стратегия: Read,Write-once (Чтение, запись при
///первом обращении)
/// </summary>
public string Fam
{
set {if (fam == "") fam = value;}
get {return(fam);}
}
/// <summary>
///стратегия: Read-only(Только чтение)
/// </summary>
public string Status
{
get {return(status);}
}
/// <summary>
///стратегия: Read,Write (Чтение, запись)
/// </summary>
public int Age
{
set
{
age = value;
if(age < 7)status ="ребенок";
else if(age <17)status ="школьник";
else if (age < 22)status = "студент";
else status = "служащий";
}
get {return(age);}
}
/// <summary>
///стратегия: Write-only (Только запись)
/// </summary>
public int Salary
{
set {salary = value;}
}
}
Рассмотрим теперь общий синтаксис методов-свойств. Пусть name - это закрытое свойство. Тогда для него можно определить открытый метод-свойство (функцию), возвращающую тот же тип, что и поле name. Имя метода обычно близко к имени поля (например, Name). Тело свойства содержит два метода - get и set, один из которых может быть опущен. Метод get возвращает значение закрытого поля, метод set - устанавливает значение, используя передаваемое ему значение в момент вызова, хранящееся в служебной переменной со стандартным именем value. Поскольку get и set - это обычные процедуры языка, то программно можно реализовать сколь угодно сложные стратегии доступа. В нашем примере фамилия меняется, только если ее значение равно пустой строке и это означает, что фамилия персоны ни разу еще не задавалась. Статус персоны пересчитывается автоматически при всяком изменении возраста, явно изменять его нельзя. Вот пример, показывающий, как некоторый клиент создает и работает с полями персоны:
public void TestPersonProps()
{
Person pers1 = new Person();
pers1.Fam = "Петров";
pers1.Age = 21;
pers1.Salary = 1000;
Console.WriteLine ("Фам={0}, возраст={1}, статус={2}",
pers1.Fam, pers1.Age, pers1.Status);
pers1.Fam = "Иванов"; pers1.Age += 1;
Console.WriteLine ("Фам={0}, возраст={1}, статус={2}",
pers1.Fam, pers1.Age, pers1.Status);
}