×
=0) { let js = text.slice(pos1, pos2); + '<\/' + "script" + '>'; arrText.push(js); // next pos1 = pos2; continue; } } } break; } return arrText; } function OpenDialog(parentDiv, urlContent) { parentDiv = document.getElementById('modal-background'); // new !!!!!!! parentDiv.appendChild(document.getElementById('modal-template')); document.getElementById('modal-background').style.display = "block"; document.getElementById('modal-template').style.display = "flex"; // !!!!! document.getElementById('modal-body').innerHTML = ""; post_url(urlContent, "", function(text_from_server) { var element = document.getElementById('modal-body'); element.innerHTML = text_from_server; // add scripts var arrJSText = get_scripts(text_from_server); for (var i=0; i
dir.by
Поиск
Праздники ...
День Святого Валентина (14 Февраля)
Концерты, выставки, цирки ...
Спектакль "Абсолютное счастье" г. Минск 24 января, 12 февраля, 20 марта 2026
Афишу
Спорт занятия ...
У-шу Саньда, Рукопашный бой, Бокс, Тайский бокс (муай тай) и другое
Спорт занятие
Компьютеры, игры, программирование
Объявления ...
Путешествия и туры
Объявление
Форум (ваши вопросы, обсуждение)
Программирование, разработка, тестирование
→
C# (язык программирования)
→
Сборка (Assembly) в C#. Компиляция. Промежуточный код IL (Intermediate Language). Метаданные.
Посмотрели
20381
раз(а)
Сборка (Assembly) в C#. Компиляция. Промежуточный код IL (Intermediate Language). Метаданные.
последнее обновление: 21 июня 2023
Сборка (Assembly) в C#
Сначала мы пишем код на
C#
в
Visual Studio
.
Потом мы в
Visual Studio
компилируем наш
C#
код и результатом является
файл .exe или .dll
На заметку!
Сборки реализованы как файлы
.exe
или
.dll
Сборки представляют собой базовый элемент развертывания, управления версиями, повторного использования, назначения областей активации и прав доступа для приложения на основе платформы
.NET
Сборки предоставляют сведения для среды
CLR
, которые нужны для распознавания реализаций типов. Сборку можно представить как коллекцию типов и ресурсов, которые предназначены для совместной работы и формируют логическую единицу функциональности.
Сборка в одном физическом файле
Редко, но сборка может состоять из нескольких физических файлов.
Создание сборки
Чтобы создать сборку нужно скомпилировать ваш
C#
код используя
Visual Studio
.
Компилятор в
Visual Studio
выполняет всю работу:
Шаг 1
Компилятор в
Visual Studio
компилирует ваши
C#
файлы в управляемые модули.
Управляемые модули содержат
IL
код (промежуточный код) и метаданные
Шаг 2
Компилятор компанует управляемые модули в одну сборку (
.exe
или
.dll
файл)
Работа компилятора в Visual Studio
Шаг 1
Шаг 2
Схема
На заметку!
Среда
CLR
работает со сборками.
Сборки имеют следующие свойства
• Сборки реализованы как файлы
.exe
или
.dll
• Сборку можно совместно использовать в нескольких приложениях, поместив ее в глобальный кэш сборок. Сборки должны получить строгие имена, чтобы их можно было включить в глобальный кэш сборок.
Подробнее:
Сборки со строгими именами ...
.
• Сборки загружаются в память только в том случае, если они реально используются. Если сборка не используется, она не загружается. Благодаря этому свойству сборки могут быть эффективным средством для управления ресурсами в крупных проектах.
• Сведения о сборке можно получить программным путем с помощью
C# reflection...
• Если вы хотите загрузить сборку только для ее проверки, используйте метод, такой как
ReflectionOnlyLoadFrom...
Сборки имеют следующие составляющие:
•
Манифест.
Манифест содержит метаданные сборки
•
Метаданные типов
. Используя эти метаданные, сборка определяет местоположение типов в файле приложения, а также места размещения их в памяти
•
IL
код. Наш код на
C#
компилируется в
IL
код
•
Ресурсы
Класс Assembly
Пространство имен:
System.Reflection
Свойства класса Assembly
string
CodeBase
{ get; }
Директорий и название файла сборки
MethodInfo
EntryPoint
{ get; }
Объект, представляющий точку входа этой сборки. Если точка входа не найдена (например, сборка является
DLL
-библиотекой), возвращается значение
null
Module
ManifestModule
{ get; }
Возвращает модуль, содержащий манифест текущей сборки
IEnumerable<
Module
>
Modules
{ get; }
Возвращает модуль, содержащий манифест текущей сборки
Методы класса Assembly
object
CreateInstance
(string typeName, ...)
создает объект по названию типа
Assembly
GetAssembly
(
Type
type)
Возвращает загруженную сборку, в которой определен заданный тип
Module
[]
GetLoadedModules
()
Возвращает все загруженные модули, этой сборки
Module
[]
GetModules
()
Возвращает все модули, этой сборки
Type
GetType
(string name)
Возвращает информацию о типе по названию типа
Пример:
using System;
using System.Reflection;
namespace
ConsoleApplication1
{
class
Book
{
public string Name;
public int Price;
}
class
Program
{
static void
Main
(string[] args)
{
// получаем сборку
Assembly assembly = typeof(Program).Assembly;
// получаем информацию для типа Book
// из namespace ConsoleApplication1
Type t = assembly.
GetType
("ConsoleApplication1.Book");
// перебираем все поля класса Book
object[] fields = t.GetFields();
foreach (var value in fields)
Console.WriteLine(value);
}
}
}
Type
[]
GetTypes
()
Возвращает типы, определенные в этой сборке
bool
IsDefined
(
Type
attributeType, bool inherit)
Присутствует ли тип в сборке
Assembly
Load
(
AssemblyName
assemblyRef)
Загружает сборку по имени
Assembly
LoadFrom
(string assemblyFile)
Загружает сборку по пути
Все свойства и методы Assembly ...
IL (Intermediate Language)
Когда мы компилируем
C# код
, то создается
IL
(Intermediate Language) промежуточный код.
IL
это независящий от процессора машинный язык, разработанный
Microsoft
после консультаций с несколькими коммерческими и академическими организациями, специализирующимися на разработке языков и компиляторов.
IL
— язык более высокого уровня в сравнении с большинством других машинных языков. Он позволяет работать с объектами и имеет команды для создания и инициализации объектов, вызова виртуальных методов и непосредственного манипулирования элементами массивов. В нем даже есть команды генерации и перехвата исключений для обработки ошибок.
IL
можно рассматривать как объектно-ориентированный машинный язык.
IL
ориентирован на работу со стеком, то есть все его команды помещают операнды в стек исполнения и извлекают результаты из стека. Поскольку в
IL
нет команд работы с регистрами, разработчики компиляторов могут расслабиться: не нужно думать об управлении регистрами, да и команд в
IL
меньше (за счет отсутствия тех же команд работы с регистрами).
Команды
IL
не связаны и с типами. Так,
IL
команда
add
складывает два последних операнда, помещенных в стек; нет отдельных 32 и 64 разрядной версий команды. При выполнении
add
определяет типы операндов в стеке и делает, что требуется.
Пример:
IL
код
Метаданные
Метаданные — набор из таблиц данных, описывающих то, что определено в модуле. Также есть таблицы, указывающие на что ссылается управляемый модуль (например, импортируемые типы и числа). Они расширяют возможности таких технологий как библиотеки типов и файлы языка описания интерфейсов (
IDL
). Метаданные всегда связаны с файлом с
IL
кодом, фактически они встроены в
*.exe
или
*.dll
.
Таким образом метаданные это таблицы, в которых есть поля, говорящие о том, что такой-то метод находится в таком-то файле и принадлежит такому-то типу (классу).
TypeDef
— это запись, для каждого типа, определенного в модуле.
К примеру
TypeDef #1
описывает класс
SomeClass
и показывает поле
Field #1
так:
Field Name: age
метод MethodName: GetAge
конструктор MethodName: .ctor
Запись
TypeDef #2
описывает класс
Program
.
Разобравшись с основными понятиями, давайте посмотрим из чего же состоит тот самый управляемый модуль (или просто наш файл
ConsoleApplication_Test_Csharp.exe
, который выполняет вывод на экран возраста объекта):
Заголовок показывает на каком типе процессора будет выполняться программа.
PE32
(для 32 и 64 битных ОС) или
PE32+
(только для 64 битных ОС)
Заголовок
CLR
— содержит информацию, превращающую этот модуль в управляемый (флаги, версия
CLR
, точки входа в
Main()
)
Метаданные 2 вида:
1) определенные в исходном коде типы и члены
2) типы и члены, имеющие ссылки в исходном коде
Манифест (Manifest)
Манифест ([skip]
Manifest
[/skip])
. Если у сборки отсутствует манифест, то заключенный в ней код
MSIL
выполняться не будет. Манифест может находиться в одном файле с исполняемым кодом сборки, а может размещаться и в отдельном файле.
Манифест хранит следующие данные:
•
Имя сборки
•
Номер версии:
основной и дополнительный номера. Используется для управления версиями
•
Язык и региональные параметры:
информация о языке и региональных параметрах, которые поддерживает сборка
•
Информация о строгом имени:
открытый ключ издателя
•
Список всех файлов сборки:
хэш и имя каждого из входящих в сборку файлов
•
Список ссылок на другие сборки
которые использует текущая сборка
•
Список ссылок на типы
используемые сборкой
Тоесть, манифест позволяет определить все файлы, входящие в сборку, сопоставить ссылки на типы, ресурсы, сборки с их файлами, управлять контролем версий.
На заметку!
Когда выполняется
C#
приложение, то запускается исполнительная среда
CLR
и выполняет
IL
код.
CLR
исполняет
IL
код в 2 шага:
Шаг 1
IL
код компилируется в комманды процессора (0001 0011 1101… ). Этим занимается
JIT
компилятор в
CLR
среде.
JIT
компилятор хранит машинные команды в динамической памяти. При выполнении такой же команды из
IL
кода, повторная верификация и компиляция не производятся.
Шаг 2
Выполняются комманды процессора.
Подробнее о выполнении
CLR
в приложении
C#
...
← Предыдущая тема
Как определить #define для всех файлов (для всего проекта) в С# ?
Следующая тема →
Как подключить C# сборку в проект?
Ваши Отзывы ... комментарии ...
Вашe имя
Ваш комментарий
(www ссылки может добавлять только залогиненный пользователь)
+ картинку
Экскурсии по Москве: пешеходные, автобусные и речные прогулки на любой вкус
Объявления
Объявления
•
Загрузка и установка Microsoft Visual Studio
•
Скачать и установить Visual Studio 2022 (для изучения C#, написание программ: WPF, ASP.NET, ASP.NET Core, UWP, Miaui, Xamarin, Unity, MonoGame)
•
Скачать и установить Visual Studio 2019 (для изучения C#, написание программ: WPF, ASP.NET, ASP.NET Core, Xamarin, Unity, MonoGame)
•
Загрузка и установка Visual Studio 2017 (для изучения C#, написание программ: WPF, ASP.NET, ASP.NET Core, Xamarin, Unity, MonoGame)
Новое приложение для изучения C#
•
Создаем новое консольное приложение для изучения C#
Отладка кода
•
Debug.Assert(false) Отладка кода в C#
•
Для отладки, опция "Common Language Runtime Exceptions" увидеть исключения, когда выполняется программа C#
•
Атрибут [Obsolete("Мой метод устарел. Не используйте", false)] Предупреждение при компиляции кода в C#
Типы данных C#
•
C# типы данных: число (bool, char, byte, int, long, float, double, decimal), текст (string), перечисление (enum), класс (class), структура (struct)
•
Структура Boolean В C# это флаг со значениями true или false (bool) и методы для конвертации bool
•
Структура Int32 В C# это целое число со знаком (int) и методы для конвертации int
•
Структура Single В C# это число с плавающей запятой (float) и методы для конвертации float
•
var ... Переменная любого типа В C#. Пример: var str = "Hello!";
•
Тип dynamic В C#
•
Значения по умолчанию В C#
Хранение объектов в памяти. Удаление объектов из памяти
•
Ссылочные типы и типы значений В C#
•
Стэк (stack) - память для параметров метода и локальных переменных В C#
•
Heap - динамическая память доступная во время выполнения программы В C#
•
Интерфейс IDisposable. Пишем код для правильного освобождения неуправляемых ресурсов в деструкторе и в интерфейсе IDisposable В C#
•
Память. Сборщик мусора (garbage collector). Автоматическое освобождение памяти В C#
C# конвертация типов
•
C# конвертация строки в число (string → short, int, long, ushort, uint, ulong, float, double, decimal) | используем Culture (настройки системы)
•
C# конвертация числа в строку (int, double, short, ... → string) с требуемой точностью
Текст в C# (тип string и класс String)
•
Алгоритм пересечения прямоугольников
•
Что такое текст В C# ? Тип string и класс String. Методы для работы с текстом.
•
Length (длина строки в C#). Пример: string str1 = "Hello"; int v1 = str1.Length;
•
CompareTo (сравнивает текст с учетом регистра в C#). Пример: bool bIsSame = str1.CompareTo(str2)==0;
•
ToLower (конвертирует текст в нижний регистр в C#). Пример: string str1 = "HELLO World!"; string str2 = str1.ToLower();
•
ToUpper (конвертирует текст в верхний регистр в C#). Пример: string str1 = "Hello World!"; string str2 = str1.ToUpper();
•
Split (разбить строку на слова в C#). Пример: string[] arrWords = strText.Split(' ');
•
StartsWith (проверяет начало текста с указанным текстом с учетом регистра в C#). Пример: bool bStart = str1.StartsWith(str2);
•
Contains (проверяет содержит текст указанный текст или нет с учетом регистра в C#). Пример: bool bFound = str1.Contains(str2);
•
IndexOf (ищет строку с учетом регистра и возвращает позицию в C#). Пример: int pos = str1.IndexOf(str2);
•
Substring (возвращает часть текста с указанной позиции и длиной В C#). Пример: string str1 = "Hello World!"; string str2 = str1.Substring(2, 5);
•
IsNullOrEmpty (проверяет текст на пустой или на null В C#). Пример: string name = "Hello World!"; bool bFlag = String.IsNullOrEmpty(name);
•
IsNullOrWhiteSpace (проверяет текст на null или на текст с пробелами В C#). Пример: string name = " "; bool bFlag = String.IsNullOrWhiteSpace(name);
•
[] (возвращает символ с указанной позиции В C#). Пример: char symbol = str[1];
•
Format (форматирование текста, строки В C#). Пример: string strNew = String.Format("Hello {0}, {1}", name, year);
•
+ (добавление строк и текста В C#). Пример: string str = str1 + str2 + " people!";
•
$ (интерполяция строк В C#). Пример: string result = $"Hello {a} + {b} = {a + b}";
•
Символ @ перед началом строки В C#. Пример: string str1 = @"aaa";
•
Используем вместе @ и $ (интерполяцию строк в C#)
DateTime (дата и время) в C#
•
Что такое DateTime в C# ? Конвертация в строку с форматом
Перечисления в C# (enum)
•
Что такое перечисление (enum) В C# ?
•
Как преобразовать текст в enum в C#
•
Как перечислить все элементы в enum в C#
null
•
null значение для простых типов. Используем ? или Nullable В C#
•
Оператор ?? (null-объединение) В C#
try-catch
•
Обработка исключений в C#. Оператор try catch finally
Классы в C# (class)
•
Что такое класс В C#?
•
Модификаторы доступа класса В C#. Модификаторы доступа для методов, свойств, полей В C#
•
'partial class' В C#. Описание класса в разных файлах
Конструкторы для класса
•
Конструктор класса В C#
•
Инициализация объекта класса (установка значений для полей) В C#
•
Вызов конструктора у базового класса В C#
•
Статический конструктор в классе C#
•
'base' Для вызова метода из базового класса. Для вызова переменной из базового класса. Для вызова конструктора из базового класса. C#
•
'this' Для установки или получения значения у поля класса. Для вызова конструктора из класса. C#
Деструкторы для класса
•
Деструктор класса В C#
•
Деструкторы в классах (как вызываются базовые деструкторы) C#
Наследование
•
Что такое наследование класса в C# ?
Наследование с использованием new
•
Используем new для метода интерфейса. Наследование интерфейса от интерфейса с одинаковым методом
•
Используем new для метода класса. Наследование класса от класса в C#.
Наследование с использованием sealed
•
sealed class. Запрет наследоваться В C#
•
Наследование класса от класса в C#. Используем слова virtual, override, sealed для методов класса
Абстрактный класс
•
Что такое абстрактный класс В C# ? Абстрактные методы, свойства, индексы.
•
Наследование от класса abstract В C#. Используем abstract и override для методов класса
Константы и readonly поля в классе
•
Константы в классе C#
•
readonly . Для поля класса. Это поле только для чтения в C#
Свойства get и set в классе C# (аксессоры)
•
get set Свойства в классе C#
•
Наследование (virtual, override) для аксессоров get и set в C#
Операторы, индексаторы в C#
•
Операторы в классе C#. Перегрузка операторов: > < ++ + true false
•
Индексаторы в классе C#
Вложенные типы в C#
•
Вложенный класс, структура в C#
Параметры в методе класса C#
•
ref и out (возврат параметров по ссылке в методе) C#. Пример: public void AddValue(ref int value)
•
Параметры по умолчанию (необязательные параметры) в методе C#. Пример: public int CalculateSum(int a, int b, int c=7)
•
Именованные параметры C#. Пример: public void CalculateSum(a:7, b:3);
Универсальные методы, универсальные классы в C# (шаблоны)
•
Метод с универсальными параметрами в C# (шаблоны). Пример: public double Sum<T1, T2>(T1 value1, T2 value2) { ... }
•
Обобщенный (типизированный) класс в C# (шаблоны). Пример class Book<T> { ... }
•
where Ограничение типа в обобщенном (типизированном) классе в C# (шаблоны). Пример class Dog<T> where T : Cat
Преобразование объекта класса из одного типа в другой
•
explicit это явный оператор преобразования в классе C#
•
implicit это неявный оператор преобразования в классе C#
•
Преобразование объекта класса из одного типа в другой в C#. Используем try ( ) is as
•
Преобразование объекта класса из одного типа в другой в C#. Используем pattern matching is switch
Объект класса в C#
•
? оператор условного null в C#
•
Объект класса содержит ссылку в C#
•
Как чтобы при копировании объектов в C# копировались данные класса, а не ссылка?
Статический конструктор и статические свойства и методы
•
Статический конструктор в классе C#
•
Статические методы, свойства, члены в классе C#
Дополнительные возможности класса в C#
•
Метод расширения в C# (this в первом параметре метода). Пример: static public void AddValues(this List<int> myList, int value1, int value2)
Правила именования классов в C#
•
Какими буквами строчными или заглавными называть классы, методы, свойства ... в C#
•
Правильно ли для каждого класса в C# создавать свой .cs файл? Или писать классы C# в одном .cs файле?
Статический класс
•
Статический класс в C#
Анонимный класс
•
Объект с анонимным (отсутствующим) типом в C#. Пример: var book = new { BookName = "Властелин Колец", Price = 100 };
Интерфейсы
•
Что такое interface в C# ?
•
Наследование interface от interface в C#
•
Наследование класса от класса от interface в C#. Используем override и virtual для методов класса
•
Обобщенный (типизированный) интерфейс в C# (шаблоны). Пример interface IUser<T> { ... }
Структура struct
•
Что такое структура в C#?
•
Модификаторы доступа структуры в C#. Модификаторы доступа для методов, свойств, полей структуры в C#
•
Инициализация объекта структуры (установка значений для полей) в C#
•
Как поменять значение в массиве структур или в коллекции структур (List) в C#
•
Вложенная структура в C#
Преобразование объекта структуры из одного типа в другой
•
implicit это неявный оператор преобразования структуры в C#
•
explicit это явный оператор преобразования структуры в C#
Отложенная загрузка class Lazy в C#
•
Отложенное создание объекта в памяти (class Lazy в C#)
Кортежи (tuple)
•
Кортежи (tuple) в C#
Динамические объекты с любыми свойствами
•
DynamicObject и ExpandoObject в C#
Массивы
•
Что такое массивы? array в C#
•
Инициализация массива (заполнение элементов массива array) в C#
•
params передача любого количества параметров в метод в C#
•
Класс Array (для работы с массивом) C#
Коллекции
•
Что такое коллекции в C# ?
•
Что такое необобщенные коллекции в C# ? Классы ArrayList, Stack, Queue, Hashtable, SortedList, BitArray
•
Что такое обобщенные (типизированные) коллекции в C# ? Классы List<T>, SortedList<T>, Stack<T>, Dictionary<TKey,TValue>, LinkedList<T>, Queue<T>, HashSet<T>, SortedSet<T>, ConcurrentDictionary<TKey, TValue>, SortedDictionary<TKey, TValue>
Классы необобщенных коллекций (в одной коллекции хранятся элементы разного типа)
•
Интерфейс IEnumerable. Самый базовый интерфейс для коллекций в C#
•
Интерфейсы: ICollection, IList, IDictionary. Основа для коллекций в C#
Класс ArrayList (коллекция в C#)
•
Что такое ArrayList в C# ?
Класс SortedList (коллекция в C#)
•
Что такое SortedList в C# ?
Класс Stack (коллекция в C#)
•
Что такое Stack в C# ?
Класс Queue (коллекция в C#)
•
Что такое Queue в C# ?
Класс Hashtable (коллекция в C#)
•
Что такое Hashtable в C# ?
Класс BitArray (коллекция в C#)
•
Что такое BitArray в C# ?
Классы обобщенных, типизированных коллекций в C# (в одной коллекции хранятся элементы одного типа)
•
Интерфейс IEnumerable<T>. Самый базовый интерфейс для типизированных коллекций в C#
•
Интерфейсы: ICollection<T>, IList<T>, ISet<T>, IDictionary<TKey, TValue>. Основа для типизированных коллекций в C#
Класс List<T> (типизированная коллекция в C#)
•
Что такое List<T> в C# ?
•
Инициализация коллекции List в фигурных скобках В C#
•
for, foreach (проходим все элементы в List<T>) в C#
•
Find (ищем элемент по критерию в List<T>) в C#
•
FindAll (ищем список элементов по критерию в List<T>) в C#
•
ForEach (для каждого элемента List<T> выполняется действие) в C#
Класс LinkedList<T> (типизированная коллекция в C#)
•
Что такое LinkedList<T> в C# ?
Класс SortedList<TKey, TValue> (типизированная коллекция в C#)
•
Что такое SortedList<TKey, TValue> в C# ?
Класс Stack<T> (типизированная коллекция в C#)
•
Что такое Stack<T> в C# ?
Класс Queue<T> (типизированная коллекция в C#)
•
Что такое Queue<T> в C# ?
Класс HashSet<T> (типизированная коллекция в C#)
•
Что такое HashSet<T> в C# ?
•
Как устроен HashSet<T> в C#
Класс SortedSet<T> (типизированная коллекция в C#)
•
Что такое SortedSet<T> в C# ?
Класс ObservableCollection<T> (типизированная коллекция в C#)
•
Что такое ObservableCollection<T> в C# ?
Класс Dictionary<TKey, TValue> (типизированная коллекция в C#)
•
Что такое Dictionary<TKey, TValue> в C# ?
•
Инициализация элементов в конструкторе Dictionary<TKey, TValue> в C#
•
Как устроен Dictionary<TKey, TValue> в C#
•
Как в C# сконвертировать IEnumerable в → Dictionary<TKey, TValue> . Используем метод ToDictionary
Класс SortedDictionary<TKey, TValue> (типизированная коллекция в C#)
•
Что такое SortedDictionary<TKey, TValue> в C# ?
Класс ConcurrentDictionary<TKey, TValue> (типизированная коллекция в C#)
•
Что такое ConcurrentDictionary<TKey, TValue> в C# ?
•
AddOrUpdate (добавить или обновить значение по ключу в ConcurrentDictionary<TKey, TValue>) в C#
Асимптотическая сложность для добавления, удаления, взятия элемента в коллекциях
•
Асимптотическая сложность для добавления, удаления, взятия элемента в коллекциях C# (List, SortedList, Stack, Dictionary, LinkedList, Queue, HashSet, SortedSet, ConcurrentDictionary, SortedDictionary)
Сортировка элементов в массиве [] и коллекции List
•
Сортировка элементов в массиве [] и коллекции List<T> в C#. Интерфейс IComparable
•
Сортировка элементов в массиве [] и коллекции List<T> в C#. Интерфейс IComparer
Моя реализация IEnumerator, IEnumerable и итераторы
•
Пример: Моя реализация интерфейсов IEnumerable и IEnumerator в C#
•
Итераторы и yield в C#. Примеры реализации IEnumerable с помощью yield
Методы расширения для IEnumerable
(поиск, замена, выборка значений) в C#
•
Методы поиска, замены, выборки значений в IEnumerable<T>. Методы расширений для IEnumerable<T> в C#
•
Any (метод расширения IEnumerable<T>) в C#
•
Select (метод расширения IEnumerable<T>) в C#
•
GroupBy (метод расширения IEnumerable<T>) В C#
•
GroupJoin (метод расширения IEnumerable<T>) В C#
Сортировка, фильтрация в LINQ (Language-Integrated Query)
•
Что такое LINQ в C# ?
•
Сортировка, фильтрация элементов списка с помощью LINQ в C#
•
Книги для изучения LINQ в C#
Указатели
•
Указатели в C#. Оператор unsafe
•
Указатели на структуры, поля классов, массивы в C# . Операторы unsafe, stackalloc, fixed
Работа с файлами
•
Открываем файл, читаем текст из файла и разбиваем по словам. C#
•
Создаем текстовый файл, пишем текст в файл C#
•
Создаем HTML файл, пишем табличные данные в HTML файл | C#
•
Создаем бинарный файл, пишем байты в файл C#
•
Частичная загрузка файла с FTP в C#
•
Класс Path. Метод Combine - объединяет строки в полный путь файла. И другие методы класса Path | C#
Сериализация
•
Что такое сериализация объекта в C# ? Атрибут [Serializable]
•
Сериализация C# объекта в бинарный файл. Класс BinaryFormatter. Атрибут [Serializable]
•
Сериализация C# объекта в XML файл. Класс XmlSerializer. Атрибут [Serializable]
•
Сериализация C# объекта в JSON файл. Класс DataContractJsonSerializer. Атрибут [Serializable]
•
Сериализация C# объекта в SOAP файл. Класс SoapFormatter. Атрибут [Serializable]
Пространства имен
•
Пространства имен namespace using в C#
Delegate
•
Делегат (delegate) в C#
•
Добавление метода(методов) в делегате C#. Объединение делегатов. Удаление метода из делегата
•
Делегат как параметр в методе C#
•
Безымянный, анонимный метод в C# (метод описанный на месте параметра, делегата)
Универсальные делегаты
•
Универсальные, обобщенные делегаты в C# (шаблоны)
•
Универсальные делегаты Action, Predicate и Func в C#
События
•
События (event) в C#
Лямда
•
Лямда (пример) в C#
Регулярные выражения
Регулярные выражения в C#
•
Разбиваем текст на слова (регулярные выражения в c#)
•
Ставим * вместо фамилии после первой буквы (регулярные выражения в c#)
•
Разбиваем текст на слова (регулярные выражения в c#)
Процесс, модули процесса
•
Процесс в C# (класс Process)
•
Модули процесса в С# (класс ProcessModule)
Потоки, многопоточность
•
Потоки в C# (класс Thread)
•
Пул потоков в C# (Thread Pool)
•
В чем отличие background (фоновый поток) и foreground (на переднем плане поток) в C# ?
•
Синхронизация потоков в C#
Parallel Library Task (TPL) Параллельное программирование задач
•
Parallel Library Task (TPL). Библиотека параллельных задач в C#
•
Класс Parallel используя метод Invoke параллельно выполненяет методы, циклов for и foreach (на разных ядрах процессора) в C#
•
PLINQ распараллеливает LINQ запросы для выполнения на разных ядрах процессора в C#
Асинхронные методы (async и await)
•
class Task в C#
•
Асинхронное программирование в C# (async, await как оформлять)
•
Асинхронное программирование в C# (используем async, await и Task на примере)
•
Асинхронное программирование в C# (теория)
Домены приложений
•
Что такое Домены приложений в C# ? (класс AppDomain)
•
Пример "Информация о домене приложения" (имя текущего домена, перечисляем сборки) в C#
•
Пример "Создаем 2-ой домен приложения. Пишем класс в 1-ом домене и используем во 2-ом домене. MarshalByRefObject в C#
•
Пример "Загружаем 2-ой домен приложения из файла, запускаем вычисления, выгружаем 2-ой домен из памяти" в C#
Атрибуты
•
Атрибуты для класса, метода, свойства в C#
•
Атрибут [Conditional("AAA")] . Для компиляции игнорировать метод или свойство если не определен символ условной компиляции в C#
•
Атрибут [Obsolete("Мой метод устарел. Не используйте", false)] Предупреждение при компиляции кода в C#
•
Атрибут [Display(Name = "Sleep at night")] . Для хранения какого нибудь текста прикрепленного к переменной | C#
•
Аттрибут [Required(ErrorMessage = "Пожалуйста, введите название")] описывается для свойства в C# классе и требует чтобы свойство было заполнено, если не заполнено на экране ошибка ErrorMessage в ASP.NET MVC
•
Аттрибут [Remote("IsValidAuthor", "Home", ErrorMessage = "Enter correct author of book")] описывается для свойства в C# классе и проверяет это свойство на правильность на сервере через метод IsValidAuthor в conroller Home, если метод возвращает false, то на экране будет ошибка ErrorMessage в ASP.NET MVC
Рефлексия (отражение) reflection в C#
•
Оператор nameof в C# (имя класса, имя метода, имя переменной)
•
Что такое рефлексия (отражение) в C# ? Класс Type
•
Создание объекта класса и вызов конструтора с параметрами используя рефлексию (отражение) reflection в C#
•
Как получить информацию атрибута для метода у класса. Используем reflection (отражение)
•
Как получить информацию атрибута для свойства у класса. Используем reflection (отражение)
Директивы препроцессора (if при компиляции)
•
Директивы препроцессора #define #undef #if #elif #else #endif в C#
•
Как определить #define для всех файлов (для всего проекта) в С# ?
Что такое сборка и исполняющая среда CLR ?
•
Сборка (Assembly) в C#. Компиляция. Промежуточный код IL (Intermediate Language). Метаданные.
•
Как подключить C# сборку в проект?
•
Утилита ildasm.exe. Конвертирует сборку (C# exe, dll файл) в промежуточный язык IL (Intermediate Language). Эта утилита удобна для изучения
•
Исполняющая среда CLR (Common Language Runtime) в C# . JIT (Just-In-Time) компилятор.
Создание и подключение нашей сборки
•
Создание нашей C# сборки (обычная сборка)
•
Подключение нашей C# сборки (обычная сборка)
▷
•
Создание нашей C# сборки (разделяемая сборка)
•
Подключение нашей C# сборки (разделяемая сборка)
База данных в консольном приложении C#
•
Entity Framework в консольном приложении C#. Используем Code First (пишем c# код, а таблицы в базе данных создаются сами)
•
Читаем картинку из базы данных и сохраняем в файл | ADO.NET, C#, консольное приложение
Внедрение зависимостей (Dependency Injection) DI в C#
•
Dependency Injection (DI) Внедрение зависимостей в C#
•
Ninject (IoC-контейнер) управление зависимостями в C#
•
Autofac (IoC-контейнер) управление зависимостями в C#
Удобные утилиты Visual Studio
•
Графическая диаграмма классов в C# (View Class Diagram)
exe to C# code
•
"dotPeek" application for decompile (disassemble) exe to c# source code
В приложении C# вызываем C++ функции
•
Что такое управляемый код (managed code) и неуправляемый код (unmanaged code) ? | C# и C++
•
Маршалинг (marshalling) в C#. Преобразование типов между управляемым кодом (managed code) и неуправляемым кодом (unmanaged code)
•
В приложении C# вызываем функции из Windows dll (C++ WinAPI). Атрибут [DllImport("user32.dll")]
•
В приложении C# вызываем функции из моей dll (C++). Атрибут [DllImport("My.dll", CallingConvention = CallingConvention.Cdecl)]
Дополнительные темы, вопросы
•
Не создается новый проект в Visual Studio 2019. Ошибка "Object reference not set to instance of an object"
•
Ошибка компиляции C#: error CS1106: Extension method must be defined in a non-generic static class
•
Ошибка компиляции C#: error CS0246: The type or namespace name 'Point' could not be found (are you missing a using directive or an assembly reference?)
•
Почему метод Dictionary.TryGetValue не может найти значение по ключу в C# ?
•
Объектно-ориентированное программирование (ООП). Принципы ООП: абстрагирование, инкапсуляция, наследование, полиморфизм
•
Какими буквами в C# (заглавными или строчными или прописными) называть поля, методы в классе, интерфейсы, делегаты, параметры ?
•
Правильно ли для каждого класса в C# создавать свой .cs файл? Или писать классы C# в одном .cs файле?
•
Что лучше использовать встроенный тип int или класс Integer (тип string или класс String) на C#?
•
Как скачать и установить нужную .NET Framework версию в Visual Studio ?
•
Упаковка и распаковка значимых типов в C# (boxing/unboxing)
•
Error CS8107 Feature 'default literal' is not available in C# 7.0. Please use language version 7.1 or greater
•
Error "unable to connect to web server "iis express" | C# | Visual Studio 2017
•
Удаляем и устанавливаем NuGet в Visual Studio
•
При открытии проекта в Visual Studio 2019 ошибка: "project requires 'SQL Server 2012 Express LocalDB' which is not installed on this computer"
Математические операторы checked и unchecked
•
Математический оператор unchecked в C#
•
Математический оператор checked в C#
Дополнительный C# классы
•
C# класс Random
•
C# структура Point
•
C# структура PointF
•
C# структура Size
•
C# структура SizeF
•
C# структура Rectangle
•
C# структура RectangleF
Время
•
Время, истекшее с момента загрузки системы (в миллисекундах). System.Environment.TickCount в C#
Шифрование / Cryptography
•
Зашифруем пароль и проверим | C# console application
Excell
•
Чтение excel файла на C# (сonsole application)
WWW сайты для изучения C#
•
Сайты для изучения C#
Ваши вопросы присылайте по почте:
info@dir.by