×
=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
Поиск
Программирование, разработка, тестирование
→
C# (язык программирования)
→
Обобщенный (типизированный) класс в C# (шаблоны). Пример class Book<T> { ... }
Посмотрели
14463
раз(а)
Комментариев
1
Последний комментарий
:
(15 июня 2021 21:33) хорошая статья. кратко и подробно
читать...
написать комментарий...
Обобщенный (типизированный) класс в C# (шаблоны)
последнее обновление: 8 октября 2018
Обобщенный (типизированный) класс
это
обычный класс C#
, который дополнительно использует обобщенный тип
T
заключенный в угловые скобки
<T>
.
class
Book<T>
{
protected
T
Price;
// Т может быть любым типом
...
}
Синтаксис
class
ИмяКласса
<имяШаблона1, имяШаблона2, ...>
{
...
}
Обобщенный (типизированный) класс может содержать:
• методы с универсальными параметрами
class Book<
T
>
{
// метод с универсальным параметром, потому что тип T
public void
SetPrice
(
T
price)
// Т может быть любым типом
{
Price = price;
}
}
• универсальные члены класса
class Book<
T
>
{
// универсальный член класса, потому что тип T
protected
T
Price
;
// Т может быть любым типом
...
}
• универсальные свойства
class Book<
T
>
{
// универсальное свойство, потому что тип T
public
T
Money
{ set; get; }
// Т может быть любым типом
...
}
Рассмотрим полный пример:
C#
Создаем новое C# консольное приложение...
и напишем код
using
System;
using
System.Collections;
using
System.Linq;
using
System.Text;
using
System.Threading.Tasks;
namespace
ConsoleApplication1
{
// Обобщенный (типизированный) класс в C#
class
Book<T>
{
protected
string
Name;
// универсальныый член класса, потому что тип T
protected
T
Price;
// Т может быть любым типом
// конструктор
public
Book
()
{
}
// метод с универсальным параметром T
public
void
SetPrice
(
T
price)
// Т может быть любым типом
{
Price = price;
}
public
void
SetName
(
string
name)
{
Name = name;
}
public
void
Show
()
{
Console
.WriteLine(
"Цена="
+ Price +
" Name="
+ Name);
}
}
class
Program
{
static
void
Main
(
string
[] args)
{
// Создаем объект обобщенного (типизированного) класса Book<T> где T это int
Book<
int
> book1 =
new
Book<
int
>();
book1.SetPrice(10);
// int
book1.SetName(
"Властелин Колец"
);
book1.Show();
// на экране увидим
// Цена=10 Name=Властелин Колец
// Создаем объект обобщенного (типизированного) класса Book<T> где T это string
Book<
string
> book2 =
new
Book<
string
>();
book2.SetPrice(
"3 dollars"
);
book2.SetName(
"Троль"
);
book2.Show();
// на экране увидим
// Цена=3 dollars Name=Троль
}
}
}
Угловые скобки в описании
class
Book<T>
указывают, что класс является обобщенным, а тип
T
, заключенный в угловые скобки, будет использоваться этим классом. Необязательно использовать именно букву
T
, это может быть и любая другая буква или набор символов.
Cейчас нам неизвестно, что это за тип.
При создании объекта порграмма узнает какой это тип.
Параметр
T
в угловых скобках еще называется
универсальным параметром
, так как вместо него можно подставить любой тип.
Пример 2
Будем использовать:
• метод с универсальными параметрами:
public double
Sum
(T1 value1, T2 value2)
C#
Создаем новое C# консольное приложение...
и напишем код
using
System;
using
System.Collections;
using
System.Linq;
using
System.Text;
using
System.Threading.Tasks;
namespace
ConsoleApplication1
{
// Обобщенный (типизированный) класс
class
MyCalculator
<
T1
,
T2
>
{
// метод с универсальными параметрами T1 и T2
public
double
Sum
(
T1
value1,
T2
value2)
{
double
dValue1 = Convert.ToDouble(value1);
double
dValue2 = Convert.ToDouble(value2);
return
dValue1 + dValue2;
}
}
class
Program
{
static
void
Main
(
string
[] args)
{
// Создаем объект обобщенного (типизированного) класса MyCalculator<T1, T2> где T1 это int, T2 это string
MyCalculator
<
int
,
string
> calculator1 =
new
MyCalculator
<
int
,
string
>();
double
result1 = calculator1.Sum(2,
"6"
);
Console
.WriteLine(result1);
// на экране увидим
// 8
// Создаем объект обобщенного (типизированного) класса MyCalculator<T1, T2> где T1 это double, T2 это int
MyCalculator
<
double
,
int
> calculator2 =
new
MyCalculator
<
double
,
int
>();
double
result2 = calculator2.Sum(1.7, 3);
Console
.WriteLine(result2);
// на экране увидим
// 4.7
}
}
}
Пример 3
Будем использовать:
• метод с универсальными параметрами:
public double
Sum
(T1 value1, T2 value2)
• метод с определенным типом:
public double
Sum
(int value1, int value2)
C#
using
System;
using
System.Collections;
using
System.Linq;
using
System.Text;
using
System.Threading.Tasks;
namespace
ConsoleApplication1
{
// Обобщенный (типизированный) класс
class
MyCalculator
<
T1
,
T2
>
{
// метод с универсальными параметрами T1 и T2
public
double
Sum
(
T1
value1,
T2
value2)
{
double
dValue1 = Convert.ToDouble(value1);
double
dValue2 = Convert.ToDouble(value2);
return
dValue1 + dValue2;
}
// метод с определeнным типом int
public
double
Sum
(
int
value1,
int
value2)
{
return
value1 + value2;
}
}
class
Program
{
static
void
Main
(
string
[] args)
{
// Создаем объект обобщенного (типизированного) класса MyCalculator<T1, T2> где T1 это int, T2 это string
MyCalculator
<
int
,
string
> calculator1 =
new
MyCalculator
<
int
,
string
>();
double
result1 = calculator1.Sum(2,
"6"
);
// вызовется метод c универсальными параметрами public double Sum(T1 value1, T2 value2)
Console
.WriteLine(result1);
// на экране увидим
// 8
// Создаем объект обобщенного (типизированного) класса MyCalculator<T1, T2> где T1 это double, T2 это int
MyCalculator
<
int
,
int
> calculator2 =
new
MyCalculator
<
int
,
int
>();
double
result2 = calculator2.Sum(7, 3);
// вызовется метод с определенным типом public double Sum(int value1, int value2)
Console
.WriteLine(result2);
// на экране увидим
// 10
}
}
}
Пример 4 "массив значений любого типа"
Будем использовать:
• метод с универсальным параметром
public void
Add
(T value)
• универсальный член класса
protected
T
[] Values = new T[200];
C#
Создаем новое C# консольное приложение...
и напишем код
using
System;
using
System.Collections;
using
System.Linq;
using
System.Text;
using
System.Threading.Tasks;
namespace
ConsoleApplication1
{
// Обобщенный (типизированный) класс
class
MyArray
<
T
>
{
// метод с универсальным параметром T
public
void
Add
(
T
value)
{
Values[index] = value;
index++;
}
public
void
ShowValues
()
{
for
(
int
i = 0; i < index; i++)
Console
.WriteLine(Values[i]);
}
protected
int
index
= 0;
// универсальныый член класса
protected
T
[]
Values
=
new
T[200];
}
class
Program
{
static
void
Main
(
string
[] args)
{
// Создаем объект обобщенного (типизированного) класса MyArray<T> где T это string
MyArray<
string
> arr1 =
new
MyArray<
string
>();
arr1.Add(
"6"
);
arr1.Add(
"21"
);
arr1.Add(
"17"
);
arr1.ShowValues();
// на экране увидим
// 6
// 21
// 17
// Создаем объект обобщенного (типизированного) класса MyArray<T> где T это double
MyArray<
double
> arr2 =
new
MyArray<
double
>();
arr2.Add(6.2);
arr2.Add(4.5);
arr2.Add(7.8);
arr2.ShowValues();
// на экране увидим
// 6.2
// 4.5
// 7.8
}
}
}
Примеры обобщенныых (типизированныых) классов в библиотеке C#
В C# есть готовые
обобщенные (типизированные) коллекции:
List<T>
класс для добавления, удаления элементов
LinkedList<T>
двухсвязный список, в котором каждый элемент хранит 2 ссылки: ссылка на следующий элемент и ссылка на предыдущий элемент.
SortedList<TKey, TValue>
класс хранящей наборы пар "ключ-значение", отсортированных по ключу
Stack<T>
класс использует алгоритм "последний вошел - первый вышел".
Queue<T>
класс использует алгоритм "первый вошел - первый вышел".
тоже самое что и очередь в магазине
HashSet<T>
HashSet<T>
содержит неповторяющюся коллекцию элементов.
HashSet<T>
содержит элементы неупорядоченно (без сортировки).
HashSet<T>
позволяет быстро определить, есть такой элемент или нет (быстро потому что, использует индекс, который вычисляется из хэш-кода элемента).
HashSet<T>
- имеет методы
Add
,
Remove
,
Contains
, но поскольку он использует хэш-реализацию, эти операции занимают 1 действие (методы
Contains
и
Remove
в
List<T>
занимает n-действий.)
HashSet<T>
имеет методы:
UnionWith (объединение)
IntersectWith (пересечение)
ExceptWith (разность)
SymmetricExceptWith (симетрическая разность)
SortedSet<T>
SortedSet<T>
содержит неповторяющюся коллекцию элементов.
SortedSet<T>
содержит элементы упорядоченно (элементы отсортерованы).
SortedSet<T>
позволяет быстро определить, есть такой элемент или нет (быстро потому что, использует индекс, который вычисляется из хэш-кода элемента).
SortedSet<T>
- имеет методы
Add
,
Remove
,
Contains
, но поскольку он использует хэш-реализацию, эти операции занимают 1 действие (методы
Contains
и
Remove
в
List<T>
занимает n-действий.)
SortedSet<T>
имеет методы:
UnionWith (объединение)
IntersectWith (пересечение)
ExceptWith (разность)
SymmetricExceptWith (симетрическая разность)
ObservableCollection<T>
коллекция данных, которая получает уведомления при добавлении, удалении, замены элементов в коллекции
Dictionary<TKey, TValue>
класс храняющий набор пар "ключ-значение"
SortedDictionary<TKey, TValue>
Это коллекция пар "ключ-значение", упорядоченных по ключу.
ConcurrentDictionary<TKey, TValue>
Это потокобезопасная коллекция пар "ключ-значение", доступ к которой могут одновременно получать несколько потоков.
Общие сведения об обобщенных (типизированных) классах
• Используйте универсальные типы для достижения максимального уровня повторного использования кода, безопасности типа и производительности.
• Наиболее частым случаем использования универсальных шаблонов является
обобщенные, типизированные коллекции в C#
.
• Можно создавать:
обобщенные (типизированные) интерфейсы
обобщенные (типизированные) методы
обобщенные (типизированные) события
обобщенные (типизированные) делегаты
• Доступ обобщенных (типизированных) классов к методам можно ограничить определенными типами данных. Смотрите
пример 2
• Сведения о типах, используемых в универсальном типе данных, можно получить используя
reflection
.
← Предыдущая тема
Метод с универсальными параметрами в C# (шаблоны). Пример: public double Sum<T1, T2>(T1 value1, T2 value2) { ... }
Следующая тема →
where Ограничение типа в обобщенном (типизированном) классе в C# (шаблоны). Пример class Dog<T> where T : Cat
Ваши Отзывы ...
1
комментариев
гость
15 июня 2021 21:33
хорошая статья. кратко и подробно
ответить
Вашe имя
Ваш комментарий
(www ссылки может добавлять только залогиненный пользователь)
Картинки
+ Фото
Объявления
Объявления
C# (язык программирования)
•
Загрузка и установка Microsoft Visual Studio
•
Скачать и установить Visual Studio 2022 (для изучения C#, написание программ: WPF, ASP.NET, ASP.NET Core, 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# сборки (разделяемая сборка)
База данных (Entity Framework) в консольном приложении C#
•
Entity Framework в консольном приложении C#. Используем Code First (пишем 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#
Excell
•
Чтение excel файла на C# (сonsole application)
WWW сайты для изучения C#
•
Сайты для изучения C#
Ваши вопросы присылайте по почте:
info@dir.by