76 lines
2.5 KiB
C#
76 lines
2.5 KiB
C#
|
using System;
|
|||
|
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);
|
|||
|
}
|
|||
|
}
|