Какие типы данных вы знаете?csharp-24

В C# существует богатая система типов данных, которые можно разделить на несколько основных категорий. Рассмотрим их подробно.

1. Встроенные типы данных

Целочисленные типы:

byte    b = 255;                 // 8-bit (0 до 255)
short   s = -32768;              // 16-bit (-32,768 до 32,767)
int     i = 2147483647;          // 32-bit (-2^31 до 2^31-1)
long    l = 9223372036854775807; // 64-bit (-2^63 до 2^63-1)

Типы с плавающей точкой:

float   f = 3.14f;    // 32-bit (```6-9 цифр точности)
double  d = 3.14159;  // 64-bit (```15-17 цифр точности)
decimal m = 3.14159m; // 128-bit (для финансовых расчетов)

Логический тип:

bool flag = true; // или false

Символьный тип:

char c = 'A'; // 16-bit Unicode символ

2. Ссылочные типы

string name = "C# Developer"; // Строка (неизменяемая)
object obj = new object();    // Базовый тип для всех типов
int[] numbers = new int[5];   // Массив

Пример класса (пользовательский ссылочный тип):

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

3. Типы значений

Встроенные:

DateTime date = DateTime.Now; // Дата и время
TimeSpan duration = TimeSpan.FromHours(2); // Промежуток времени
Guid guid = Guid.NewGuid();   // Глобальный уникальный идентификатор

Пользовательские структуры:

public struct Point
{
    public int X { get; set; }
    public int Y { get; set; }
}

4. Особые типы

Nullable-типы:

int? nullableInt = null; // Может содержать null

Динамический тип:

dynamic dynamicVar = "Это строка";
dynamicVar = 42; // Теперь это число

Анонимные типы:

var person = new { Name = "John", Age = 30 };

5. Указатели

unsafe
{
    int* pointer;
    int value = 42;
    pointer = &value;
    Console.WriteLine(*pointer); // 42
}

6. Обобщенные типы

List<string> strings = new List<string>();
Dictionary<int, string> dict = new Dictionary<int, string>();

7. Перечисления

public enum Days { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday }
Days today = Days.Monday;

8. Делегаты и лямбда-выражения

public delegate int MathOperation(int a, int b);
MathOperation add = (x, y) => x + y;

Различия между Value и Reference типами

ХарактеристикаValue TypesReference Types
ХранениеВ стекеВ управляемой куче
НаследованиеНе поддерживаютПоддерживают
Значение по умолчанию0/falsenull
ПрисвоениеКопирование значенияКопирование ссылки
Примерыint, struct, enumclass, interface, array

Резюмируем

C# предлагает богатую систему типов данных, включающую примитивные типы, ссылочные типы, типы значений, обобщенные типы и специальные типы. Понимание различий между этими типами и их правильное использование критически важно для написания эффективного и надежного кода. Выбор подходящего типа данных зависит от конкретной задачи, требований к производительности и семантики данных.