
- •12. Фундаментальные принципы ооп
- •13. Методы
- •14. Конструкторы и деструкторы
- •15. Структуры и перечисления
- •16. Свойства и поля класса
- •18. Анонимные типы
- •20. Расширяющие методы.
- •19. Перегрузка операций в классе. Явное и неявное преобразование типов. Ограничения на преобразование типов.
- •17. Статические поля, методы, конструкторы, классы.
- •2. Типы данных
- •3. Базовые типы
- •Унарные операции Можно определять в классе следующие унарные операции:
- •Бинарные операции
- •5.Выражения (порядок их вычисления, тип результата, оператор присваивания).
- •6.Операторы ветвления (if, switch, case, break , goto case).
- •Оператор break
- •Оператор goto-оператор безусловного перехода. Когда в программе встречается оператор goto, ее выполнение переходит непосредственно к тому месту, на которое указывает этот оператор.
- •7. Операторы цикла (for, while, do-while, foreach, break continue).
- •8. Обработка исключений (операторы обработки исключений, класс Exception, создание объектов Exception, захват исключения, последовательность обработки исключений, классы Debug и Trace)
- •9. Массивы (одномерные, многомерные и ступенчатые массивы, класс Array).
- •Многомерные массивы
- •Ступенчатые массивы
- •10. Создание и подключение сборок. Пространства имен (ключевые слова using, namespace)
- •11. Сложение:
- •14. Структурные блоки платформы .Net: cli, clr, cls, cts.
- •17. Таблица приоритетов операций, соответствующая Common Language Specification (cls)
- •21. Интерфейс программирования приложений WinForms.
- •22. Интерфейс программирования приложений wpf.
- •24.Кодирование символов (ascii, utf, utf-8, utf-16)
- •3.Вопросы по c# часть 1
- •22 Делегаты
- •23 События
- •24 Наследование классов
- •25 Интерфейсы
- •26 Шаблоны и интерфейс iEnumerable
- •27 Динамический тип данных
- •Статический класс Environment.
- •2) Класс DriveInfo.
- •3) Классы для работы с каталогами (папками) (System.Io.Directory, System.Io.DirectoryInfo)
- •9.2.3. Создание подпапок с помощью класса DirectoryInfo
- •9.3. Работа с классом Directory
- •9.4. Работа с классом DriveInfo
- •Классы для работы с файлами (System.Io.File, System.Io.FileInfo).
- •9.1. Абстрактный базовый класс FileSystemInfo
26 Шаблоны и интерфейс iEnumerable
Универсальные шаблоны были добавлены в язык C# версии 2.0 и среду CLR. Универсальные шаблоны в платформе .NET Framework представляют концепцию параметров типов, которые позволяют разрабатывать классы и методы, не придерживающиеся спецификации одного или нескольких типов до тех пор, пока класс или метод не будет объявлен клиентским кодом и пока не будет создан его экземпляр. Например, используя параметр универсального типа T можно написать отдельный класс, который другой клиентский код сможет использовать без риска привидения во время выполнения или операций упаковки-преобразования, как показано в следующем примере:
// Declare the generic class.
public class GenericList<T>
{
void Add(T input) { }
}
class TestGenericList
{
private class ExampleClass { }
static void Main()
{
GenericList<int> list1 = new GenericList<int>();
GenericList<string> list2 = new GenericList<string>();
GenericList<ExampleClass> list3 = new GenericList<ExampleClass>(); }}
IEnumerable
Предоставляет перечислитель, который поддерживает простой перебор элементов неуниверсальной коллекции.
Пример программы, проверяющей реализует ли объект типа string интерфейс IEnumerable (C# .NET)
|
using System; using System.Collections; namespace InterfaceTest { class Program { static void Main(string[] args) { object testedObject = "1234567"; if (testedObject is IEnumerable) Console.WriteLine("Указанный объект реализует интерфейс IEnumerable!"); else Console.WriteLine("Указанный объект НЕ реализует интерфейс IEnumerable!"); Console.ReadLine(); }}}
|
IEquatable<T>
Определяет обобщенный метод сравнения, тип значения или класс которого используется для определения равенства экземпляров.
Предложение where используется в определении универсального типа для указания ограничений типов, которые могут использоваться в качестве аргументов параметра типа, определенного в универсальном объявлении. Например, можно объявить универсальный класс MyGenericClass, чтобы параметр типа Tреализовывал интерфейс IComparable<T>.
public class MyGenericClass<T> where T:IComparable { }
Контекстно-зависимое ключевое слово value используется для задания метода доступа в обычных объявлениях свойств. Оно аналогично входному параметру метода. Ключевое слово value ссылается на значение, которое клиентский код пытается присвоить свойству. В следующем примере класс MyDerivedClassсодержит свойство с именем Name, в котором используется параметр value для назначения новой строки резервному полю name. С точки зрения клиентского кода данная операция выглядит как простое присвоение.
Ключевое слово yield указывает, что метод, оператор или метод доступа get, в котором оно используется, является итератором. Итератор можно использовать для выполнения настраиваемой итерации по коллекции (то есть для перебора элементов коллекции). В следующем примере показаны две формы записи оператораyield.
yield return <expression>;
yield break;
Выражение return прерывает выполнение метода, в котором оно присутствует и возвращает управление вызывающему методу. Оно также возвращает необязательное значение. Если метод является типом void, оператор return можно опустить.
Если оператор return находится внутри блока try, блок finally, если он существует, будет выполняться до возврата управления вызывающему методу.
class ReturnTest
{
static double CalculateArea(int r)
{
double area = r * r * Math.PI;
return area;
}
static void Main()
{
int radius = 5;
double result = CalculateArea(radius);
Console.WriteLine("The area is {0:0.00}", result);
// Keep the console open in debug mode.
Console.WriteLine("Press any key to exit.");
Console.ReadKey(); }}
// Output: The area is 78.54
Оператор new используется для создания объектов и вызова конструкторов.
Модификатор new используется для того, чтобы скрыть наследуемый член от члена базового класса.
Ограничение new используется для ограничения типов, которые могут использоваться в качестве аргументов для параметра типа в универсальном объявлении.