> For the complete documentation index, see [llms.txt](https://topittop2.gitbook.io/topittop2/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://topittop2.gitbook.io/topittop2/c/tipy-dannykh-i-peremennye.md).

# Типы данных и переменные

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

### Основные типы данных

C# делит типы данных на **значимые** (value types) и **ссылочные** (reference types). Значимые типы хранят данные напрямую, а ссылочные — ссылку на данные в памяти.

#### Значимые типы (Value Types)

Значимые типы включают числовые, логические и другие простые типы. Вот основные из них:

* **Целые числа**:
  * `int` — 32-битное целое число (от -2,147,483,648 до 2,147,483,647).

    ```csharp
    int age = 25; // Объявление и инициализация переменной
    WriteLine(age); // Вывод: 25
    ```
  * `byte` — 8-битное целое без знака (0–255).
  * `short` — 16-битное целое (-32,768–32,767).
  * `long` — 64-битное целое (очень большие числа).
* **Числа с плавающей точкой**:
  * `float` — 32-битное число с плавающей точкой, требует суффикс `f`.

    ```csharp
    float temperature = 36.6f;
    WriteLine(temperature); // Вывод: 36.6
    ```
  * `double` — 64-битное число с плавающей точкой, более точное.
  * `decimal` — 128-битное число для финансовых вычислений, требует суффикс `m`.
* **Логический тип**:
  * `bool` — хранит `true` или `false`.

    ```csharp
    bool isStudent = true;
    WriteLine(isStudent); // Вывод: True
    ```
* **Символьный тип**:
  * `char` — один символ Unicode, задаётся в одинарных кавычках.

    ```csharp
    char grade = 'A';
    WriteLine(grade); // Вывод: A
    ```

#### Ссылочные типы (Reference Types)

Ссылочные типы хранят ссылку на данные. Если переменная не инициализирована, она равна `null`.

* **Строка**:
  * `string` — последовательность символов, задаётся в двойных кавычках.

    ```csharp
    string name = "Алексей";
    WriteLine(name); // Вывод: Алексей
    ```
* **Объект**:
  * `object` — базовый тип, от которого наследуются все остальные.

    ```csharp
    object anything = 42; // Может хранить любой тип
    WriteLine(anything); // Вывод: 42
    ```

#### Объявление переменных

Переменная объявляется с указанием типа и имени. Инициализация (присваивание значения) необязательна, но рекомендуется.

```csharp
using static System.Console;

class Program
{
    static void Main(string[] args)
    {
        int number = 10; // Объявление и инициализация
        double pi = 3.14;
        string greeting = "Привет, мир!";
        WriteLine($"{number}, {pi}, {greeting}");
        // Вывод: 10, 3.14, Привет, мир!
    }
}
```

#### Неявная типизация с `var`

Ключевое слово `var` позволяет компилятору самому определить тип переменной на основе присваиваемого значения. Используется только при инициализации.

```csharp
var count = 42; // Компилятор поймёт, что это int
var message = "Hello"; // Это string
WriteLine($"{count}, {message}"); // Вывод: 42, Hello
```

#### Почему `void` — не тип данных?

`void` используется в методах для указания, что метод **не возвращает значение**. Это не тип данных, а скорее индикатор отсутствия возвращаемого результата. Например:

```csharp
static void SayHello()
{
    WriteLine("Привет!");
}
```

Здесь `SayHello` не возвращает никаких данных, поэтому используется `void`. В отличие от типов вроде `int` или `string`, `void` нельзя использовать для объявления переменных.

#### Константы и неизменяемые переменные

* **`const`** — задаёт константу, значение которой нельзя изменить. Задаётся при компиляции.

  ```csharp
  const double Pi = 3.14159;
  // Pi = 3.14; // Ошибка: константу нельзя изменить
  ```
* **`readonly`** — переменная, которую можно задать только в конструкторе или при объявлении.

  ```csharp
  readonly int maxValue = 100;
  ```

### Полезные советы

* Выбирайте тип данных, подходящий по размеру и назначению (например, `byte` для маленьких чисел, `decimal` для денег).
* Используйте `var` для упрощения кода, но только если тип очевиден.
* Для методов, не возвращающих данные, используйте `void`.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://topittop2.gitbook.io/topittop2/c/tipy-dannykh-i-peremennye.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
