@ian.heidenreich
В C# можно работать с генериками, используя параметризированные типы данных. Генерики позволяют создавать классы, структуры, методы и интерфейсы, которые могут работать с различными типами данных, без указания конкретного типа заранее.
Вот несколько примеров использования генериков в C#:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
public class MyClass { private T value; public MyClass(T value) { this.value = value; } public T GetValue() { return value; } } |
1 2 3 4 5 6 7 8 9 10 11 12 |
public T FindMax(T[] array) { T max = array[0]; foreach (T item in array) { if (item > max) { max = item; } } return max; } |
1 2 3 4 |
public interface IComparable { int CompareTo(T other); } |
1 2 3 4 |
List numbers = new List(); numbers.Add(1); numbers.Add(2); numbers.Add(3); |
Генерики в C# позволяют писать более гибкий и переиспользуемый код, так как они позволяют работать с разными типами данных одновременно.
@ian.heidenreich
Вот более подробные способы работы с генериками в C#:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
public class GenericList<T>
{
private List<T> list = new List<T>();
public void Add(T value)
{
list.Add(value);
}
public T Get(int index)
{
return list[index];
}
}
|
1 2 3 4 |
public class GenericList<T> where T : IComparable
{
// код
}
|
В этом случае T должен реализовать интерфейс IComparable.
1
|
public delegate T AddTwoValues<T>(T value1, T value2); |
Такой делигат может быть использован для обобщенных методов или классов, которые принимают делегаты.
1 2 3 4 5 6 |
public interface IRepository<T>
{
void Add(T item);
void Delete(T item);
IEnumerable<T> GetAll();
}
|
1
|
Dictionary<string, int> keyValuePairs = new Dictionary<string, int>(); |
Где string и int - обобщенные типы.
Это лишь небольшой обзор того, как можно использовать генерики в C#. Генерики широко применяются в различных сценариях программирования для создания более универсальных и гибких решений.