> For the complete documentation index, see [llms.txt](https://g-klensky.gitbook.io/roadmap/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://g-klensky.gitbook.io/roadmap/tech-skills/c.md).

# Язык C\#

### Темы:

* Примитивные конструкции языка C#: Типы данных, Переменные, Методы, Операторы, Символы, Строки, Массивы, Циклы, Условия, Комментарии, Пространства имен, Перегрузка операторов
* Ссылочные и значимые типы данных: Stack vs Heap, Классы и структуры, Класс Object, Модификаторы доступа: public/private/protected/internal/protected internal ; Интерфейсы и Абстрактные классы ; Перечисления ; Операторы const и readonly ; Упаковка и Распаковка
* Обобщения для классов, методов, интерфейсов, структур и делегатов | Ограничения
* Cтатические классы/свойства/конструкторы | Правила вызовов статических конструкторов
* Наследование в С# | Правила вызова конструкторов в иерархиях наследования | Операторы is и as | constructor chaining | Использование ключевых слов virtual, override, new
* Делегаты и События, Func vs Action | Лямбда Выражения/Анонимные методы | Обработка исключений try/catch/finally/throw, Фильтры исключений | Nullable типы | Методы расширения | Tuples
* Классы string и StringBuilder, Неизменяемость строк, Интернирование строк, ASCII и Unicode
* Структуры DateTime/TimeSpan/DateTimeOffset | Класс Random | Структура Guid | Интерфейсы IComparable, IEquatable, IComparer
* Коллекции ArrayList, List, Dictionary, Hashtable, HashSet, LinkedList, Stack, Queue, Класс Array | Интерфейсы IEnumerable и IEnumerator, Утиная типизация (duck typing), Цикл foreach | Интерфейсы ICollection, IList, IReadOnlyList

### Контрольные вопросы:

* В чем разница между ссылочными и значимыми типами данных?
* В чем разница между делегатами и событиями?
* В чем разница между операторами const и readonly?
* Может ли структура реализовывать интерфейс
* Что такое Duck typing? В чем отличия интерфейсов IEnumerable и IEnumerator?
* В чем заключается необходимость неизменяемости строк? (или какие преимущества неизменяемых типов над изменяемыми?)
* Почему StringBuilder значительно опережает string по производительности при большом количестве конкатенаций?
* Когда вызывается статический конструктор экземплярного класса?
* В чем разница между коллекциями: Dictionary vs Hashtable, Hashtable vs HashSet, Dictionary vs Lookup?
* Для чего механизм сборки мусора использует поколения?
* Существует ли связь между механизмом рефлексии и метаданными сборки?
* Как реализовать механизм Замыкания (Clojure) в C#?

### Источники

* [C# in a Nutshell](http://www.albahari.com/nutshell/bookcontents.aspx)


---

# 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:

```
GET https://g-klensky.gitbook.io/roadmap/tech-skills/c.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
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.
