Справочник по типам данных
Справочник по типам данных в C# является фундаментальной частью разработки, определяющей, как данные хранятся в памяти, какие операции можно выполнять с ними и как обеспечивается целостность данных во время выполнения программы. В C# существует два основных типа данных: значения (Value Types), такие как int, double, bool, и ссылки (Reference Types), такие как string, массивы и коллекции. Понимание типов данных критически важно, поскольку это напрямую влияет на производительность приложения, управление памятью и безопасность кода.
Использование справочника по типам данных необходимо при объявлении переменных, реализации алгоритмов, управлении структурами данных и применении принципов объектно-ориентированного программирования (ООП), таких как инкапсуляция, наследование и полиморфизм. Читатель изучит, как правильно использовать Value и Reference Types, управлять обобщёнными коллекциями и Nullable типами, а также какие лучшие практики существуют для эффективного управления памятью. Эти знания особенно полезны при проектировании сложных программных систем и приложений корпоративного уровня, где правильное использование типов данных обеспечивает стабильность, эффективность и поддерживаемость кода.
Базовый Пример
textusing System;
using System.Collections.Generic;
namespace DataTypeReferenceExample
{
class Program
{
static void Main(string\[] args)
{
// Value Types
int число = 42;
double стоимость = 99.99;
bool активен = true;
// Reference Types
string имя = "C# Разработчик";
int[] оценки = new int[] { 85, 90, 95 };
List<string> навыки = new List<string> { "OOP", "LINQ", "Async" };
// Nullable Type
int? nullableЧисло = null;
// Output
Console.WriteLine($"Число: {число}, Стоимость: {стоимость}, Активен: {активен}");
Console.WriteLine($"Имя: {имя}");
Console.WriteLine("Оценки: " + string.Join(", ", оценки));
Console.WriteLine("Навыки: " + string.Join(", ", навыки));
Console.WriteLine($"Nullable значение: {nullableЧисло?.ToString() ?? "Нет значения"}");
}
}
}
В данном примере демонстрируется различие между Value Types (int, double, bool) и Reference Types (string, массивы, List). Value Types хранятся в стеке и копируются при присваивании, тогда как Reference Types хранятся в куче и управляются по ссылке. Nullable типы (int?) позволяют переменной принимать значение null, что полезно для обработки данных из баз данных или API. Использование List
Практический Пример
textusing System;
using System.Collections.Generic;
namespace DataTypeReferencePractical
{
class Сотрудник
{
public string Имя { get; set; }
public int Возраст { get; set; }
public decimal Зарплата { get; set; }
}
class Program
{
static void Main()
{
List<Сотрудник> сотрудники = new List<Сотрудник>
{
new Сотрудник { Имя = "Алиса", Возраст = 30, Зарплата = 60000 },
new Сотрудник { Имя = "Боб", Возраст = 45, Зарплата = 80000 },
new Сотрудник { Имя = "Чарли", Возраст = 25, Зарплата = 50000 }
};
// Сортировка по зарплате
сотрудники.Sort((s1, s2) => s1.Зарплата.CompareTo(s2.Зарплата));
foreach (var s in сотрудники)
{
Console.WriteLine($"Имя: {s.Имя}, Возраст: {s.Возраст}, Зарплата: {s.Зарплата:C}");
}
}
}
}
Advanced C# Implementation
textusing System;
using System.Collections.Generic;
using System.Linq;
namespace DataTypeReferenceAdvanced
{
class Сотрудник
{
public string Имя { get; set; }
public int Возраст { get; set; }
public decimal Зарплата { get; set; }
public Сотрудник(string имя, int возраст, decimal зарплата)
{
Имя = имя;
Возраст = возраст;
Зарплата = зарплата;
}
}
class Program
{
static void Main()
{
List<Сотрудник> сотрудники = new List<Сотрудник>
{
new Сотрудник("Алиса", 30, 60000),
new Сотрудник("Боб", 45, 80000),
new Сотрудник("Чарли", 25, 50000),
new Сотрудник("Диана", 35, 70000)
};
try
{
var высокиеЗарплаты = сотрудники.Where(s => s.Зарплата > 60000)
.OrderByDescending(s => s.Зарплата)
.ToList();
foreach (var s in высокиеЗарплаты)
{
Console.WriteLine($"Высокая зарплата: {s.Имя}, Зарплата: {s.Зарплата:C}");
}
}
catch (Exception ex)
{
Console.WriteLine($"Ошибка: {ex.Message}");
}
}
}
}
Лучшие практики работы с типами данных в C# включают выбор правильного типа, эффективное управление памятью и написание поддерживаемого кода. Value Types подходят для небольших и неизменяемых данных, Reference Types — для сложных объектов и совместного использования данных. Использование Nullable типов, LINQ и обобщённых коллекций улучшает безопасность и производительность. Для оптимизации рекомендуется минимизировать создание объектов в циклах, использовать подходящие коллекции (List vs Dictionary) и следить за структурой данных. Безопасность обеспечивается через валидацию входных данных и защиту чувствительной информации. Соблюдение этих практик гарантирует создание стабильных, эффективных и поддерживаемых C# приложений.
📊 Полная Справка
C# Element/Method | Description | Syntax | Example | Notes |
---|---|---|---|---|
int | 32-битное целое | int x = 10; | int число = 100; | Стандартный Value Type |
double | Дробное число двойной точности | double d = 3.14; | double pi = 3.14159; | Высокая точность |
bool | Логический тип | bool flag = true; | bool активен = false; | true/false |
char | Один символ | char c = 'A'; | char символ = 'B'; | Одиночный символ |
string | Строка | string s = "Text"; | string имя = "Алиса"; | Reference Type, immutable |
object | Базовый тип для всех типов | object obj = 123; | object данные = "Привет"; | Хранит любой тип |
decimal | Дробное с высокой точностью | decimal деньги = 100.50m; | decimal стоимость = 19.99m; | Финансовые данные |
float | С плавающей точкой одинарной точности | float f = 1.23f; | float ставка = 0.05f; | Меньшая точность |
long | 64-битное целое | long l = 1234567890L; | long расстояние = 5000000000L; | Большие числа |
short | 16-битное целое | short s = 32000; | short температура = 150; | Компактный Value Type |
byte | 8-битное целое | byte b = 255; | byte возраст = 25; | Эффективно для памяти |
sbyte | 8-битное знаковое | sbyte sb = -128; | sbyte смещение = -50; | Малый диапазон |
uint | 32-битное беззнаковое | uint u = 4000; | uint счет = 1000; | Только положительные |
ulong | 64-битное беззнаковое | ulong ul = 100000; | ulong большое_значение = 1000000; | Большие положительные |
ushort | 16-битное беззнаковое | ushort us = 60000; | ushort высота = 55000; | Малые положительные |
int? | Nullable int | int? x = null; | int? результат = null; | Может принимать null |
List<T> | Обобщённый список | List<int> numbers = new List<int>(); | List<string> имена = new List<string>(); | Динамическая коллекция |
Dictionary\<K,V> | Коллекция ключ-значение | Dictionary\<string,int> dict = new Dictionary\<string,int>(); | Dictionary\<string,string> состояние = new Dictionary\<string,string>(); | Map Key-Value |
Array | Массив фиксированного размера | int\[] arr = new int\[5]; | string\[] фрукты = { "Яблоко", "Банан" }; | Доступ по индексу |
Tuple | Неизменяемый кортеж | var tuple = Tuple.Create(1,"A"); | var человек = Tuple.Create("Алиса",25); | Временная группа |
var | Вывод типа | var x = 10; | var сумма = 100; | Тип определяется компилятором |
dynamic | Динамический тип | dynamic obj = 1; | dynamic значение = "Привет"; | Проверка типа во время выполнения |
object\[] | Массив объектов | object\[] arr = new object\[5]; | object |
📊 Complete C# Properties Reference
Property | Values | Default | Description | C# Support |
---|---|---|---|---|
Length | int | 0 | Длина массива или строки | C# 1.0+ |
Count | int | 0 | Количество элементов в коллекции | C# 2.0+ |
Capacity | int | 0 | Вместимость коллекции | C# 2.0+ |
Item | T | null | Индексатор для доступа к элементам | C# 2.0+ |
HasValue | bool | false | Nullable проверка | C# 2.0+ |
Value | T | N/A | Доступ к значению Nullable | C# 2.0+ |
Keys | ICollection | N/A | Список ключей в Dictionary | C# 2.0+ |
Values | ICollection | N/A | Список значений в Dictionary | C# 2.0+ |
First | T | default | Первый элемент коллекции LINQ | C# 3.0+ |
Last | T | default | Последний элемент коллекции LINQ | C# 3.0+ |
ItemArray | object\[] | null | Доступ к массиву значений DataRow | C# 2.0+ |
Изучение справочника по типам данных в C# позволяет разработчикам понимать основы хранения и управления данными, использовать правильные типы для оптимизации производительности и снижать риск ошибок. В сочетании с практикой ООП, LINQ и обобщённых коллекций, эти знания помогают строить масштабируемые, поддерживаемые и эффективные приложения. Рекомендуется продолжить изучение структур данных, алгоритмов, управления памятью и асинхронного программирования для более глубокого владения C#.
🧠 Проверьте Свои Знания
Test Your Knowledge
Test your understanding of this topic with practical questions.
📝 Инструкции
- Внимательно прочитайте каждый вопрос
- Выберите лучший ответ на каждый вопрос
- Вы можете пересдавать тест столько раз, сколько захотите
- Ваш прогресс будет показан вверху