2025-05-12 02:48:54 +03:00
|
|
|
|
/*
|
|
|
|
|
* Author: Nikolay Dvurechensky
|
|
|
|
|
* Site: https://www.dvurechensky.pro/
|
|
|
|
|
* Gmail: dvurechenskysoft@gmail.com
|
|
|
|
|
* Last Updated: 12 мая 2025 02:47:11
|
|
|
|
|
* Version: 1.0.3
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
using System;
|
2024-10-05 09:59:53 +03:00
|
|
|
|
using System.Collections;
|
|
|
|
|
using System.Collections.Generic; // обобщенные коллекции
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Обобщения(Generics)
|
|
|
|
|
*/
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Обобщения(Generics) - это такие конструкции языка которые позволяют
|
|
|
|
|
/// писать код который будет одинаково работать с различными типами данных
|
|
|
|
|
/// общий код для разных типов данных, при этом мы сохраняем строгую типизацию языка
|
|
|
|
|
/// получаем несколько еще очень полезных и нужных бонусов
|
|
|
|
|
///
|
|
|
|
|
/// Например:
|
|
|
|
|
/// позволяет избежать процесса упаковки и распаковки значимых типов, что увеличивает производительность кода
|
|
|
|
|
/// </summary>
|
|
|
|
|
class Program
|
|
|
|
|
{
|
|
|
|
|
static void Main()
|
|
|
|
|
{
|
|
|
|
|
int a = 1, b = 5;
|
|
|
|
|
string c = "aa", d = "bb";
|
|
|
|
|
Console.WriteLine($"a = {a}, b = {b}");
|
|
|
|
|
Console.WriteLine($"str_d = {d}, str_c = {c}");
|
|
|
|
|
|
|
|
|
|
Swap(ref a, ref b);
|
|
|
|
|
SwapType(ref c, ref d);
|
|
|
|
|
|
|
|
|
|
Console.WriteLine($"a = {a}, b = {b}");
|
|
|
|
|
Console.WriteLine($"str_d = {d}, str_c = {c}");
|
|
|
|
|
|
|
|
|
|
// List также использует обобщения
|
|
|
|
|
var list = new List<int>();
|
|
|
|
|
list.Add(2);
|
|
|
|
|
list.Add(5);
|
|
|
|
|
Console.WriteLine($"el[1] list: {list[0]}");
|
|
|
|
|
list[0] = 1;
|
|
|
|
|
Console.WriteLine($"Change el[1] list: {list[0]}");
|
|
|
|
|
|
|
|
|
|
// ArrayList - аналог
|
|
|
|
|
// но проблемы с упаковкой распаковкой так как это тип данных object
|
|
|
|
|
// *почти не используется
|
|
|
|
|
ArrayList arrayList = new ArrayList();
|
|
|
|
|
arrayList.Add(2);
|
|
|
|
|
arrayList.Add("33");
|
|
|
|
|
Console.WriteLine($"el[1] arrayList: {arrayList[0]}");
|
|
|
|
|
arrayList[0] = 1;
|
|
|
|
|
Console.WriteLine($"Change el[1] arrayList: {arrayList[0]}");
|
|
|
|
|
|
|
|
|
|
// Свой List
|
|
|
|
|
var listString = new MyList<string>();
|
|
|
|
|
listString.Add("aaa");
|
|
|
|
|
listString.Add("bbb");
|
|
|
|
|
Console.WriteLine($"1: {listString[0]} 2: {listString[1]}");
|
|
|
|
|
Console.ReadKey();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void Swap(ref int a, ref int b)
|
|
|
|
|
{
|
|
|
|
|
int temp = a;
|
|
|
|
|
a = b;
|
|
|
|
|
b = temp;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void SwapType<T>(ref T a, ref T b)
|
|
|
|
|
{
|
|
|
|
|
T temp = a;
|
|
|
|
|
a = b;
|
|
|
|
|
b = temp;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static T Foo<T>()
|
|
|
|
|
{
|
|
|
|
|
return default(T);
|
|
|
|
|
}
|
|
|
|
|
}
|