Ключевые слова C# 10 (шпаргалка-напоминалка)
Console.WriteLine("Привет, Мир!");
// Эта шпаргалка-напоминалка предназначена, как краткое описание ключевых слов C# 10, чтобы вспомнить их
C# 10 поддерживает платформа .NET 6.
Ключевые слова — это предварительно определенные зарезервированные идентификаторы, которые имеют специальные значения для компилятора. Их нельзя использовать как идентификаторы в программах без префикса @. Например, допустимым идентификатором является @if, но не if, поскольку if является ключевым словом.
В первой таблице этой статьи перечислены ключевые слова, которые нельзя использовать как идентификаторы в любой части программы C#. Во второй таблице этой статьи перечислены контекстные ключевые слова C#. Контекстные ключевые слова имеют особое значение только в определенном контексте программы, а за пределами этого контекста могут использоваться в качестве идентификаторов. Как правило, новые ключевые слова добавляются в язык C# в качестве контекстных ключевых слов, чтобы не нарушать работу программ, созданных в предыдущих версиях.
Заимствовано из документации Microsoft (https://docs.microsoft.com/ru-ru/dotnet/csharp/language-reference/keywords/) от 23.06.2022.
Список ключевых слов
Контекстные ключевые слова
Список ключевых слов. Описание и примеры
abstract
Ключевое слово нужно для объявления абстрактного класса и его абстрактых элементов. Абстрактными элементами могут быть: методы, свойства, индексаторы и события. Нельзя создавать экземпляры абстрактного класса.
as
Оператор as нужен для преобразования ссылочных типов или типов поддерживающих null значения. Он не вызывает исключения при приведении типов. Вот его эквивалентная запись:
E as T == E is T ? (T)(E) : (T)null
base
Ключевое слово используется для доступа к членам базового класса в случаях:
- когда член переопределён;
- для доступа к конструктору базового класса.
bool
Ключевое слово для определения булевой переменной. Псевдоним для структуры System.Boolean.
break
- оператор используется для преостановки циклов (for, foreach, while или do);
- оператор используется для завершения элемента в цикле switch.
byte
Ключевое слово служит для определения однобайтового беззнакового целого числа (от 0 до 255).
case
Ключевое слово для обозначения подходящего случая для оператора switch. Порядок выбора условия оператора проверяется с верху вниз.
catch
Ключевое слово предназначено для обработки исключения вызванного в блоке try. Порядок проверки множества операторов обработки исключений происходит от первого к последнему.
char
Ключевое слово используется для объявления переменной, которая хранит в себе символ UTF-16 Unicode. Псевдоним для System.Char.
checked
Оператор для проверки переполнения арифметических операций и операций преобразования.
class
Ключевое слово предназначено для объявления класса.
const
Используется для объявления константной переменной или константного поля.
continue
Ключевое слово предназначено для перехода к следующей итерации цикла (for, foreach, while или do).
decimal
Тип данных с плавающей запятой, самый большой. Занимает 16 байт.
default
Ключевое слово default можно использовать в следующих контекстах:
- для указания значения по умолчанию в операторе switch;
- в качестве оператора или литерала по умолчанию для создания значения по умолчанию для типа данных.
- в качестве ограничения типа для переопределения универсального метода (where T : default) или явной реализации интерфейса.
delegate
Объявление делегата аналогично сигнатуре метода. Он служит, как указатель на метод.
do
Оператор цикла с постусловием. Выполнятся от одного до нескольких раз. Выполняется пока условие цикла равно true.
double
Тип данных с плавающей запятой, имеет средний размер. Занимает 8 байт.
else
Ключевое слово используется в операторе if, как оператор выполняемый в случае невыполнения условия (ложности условия).
enum
Тип перечисления, определяемый набором констант целочисленного типа.
event
Объявления события, типом данных которого является определённый делегат.
explicit
Определения оператора неявного преобразования (тип данных в текущий класс).
extern
Ключевое слово используется в объявлении метода с внешней реализацией.
false
Литерал значения лжи в типе данных bool (System.Boolean).
finally
Ключевое слово используется в опреаторе try-catch-finally для завершения обработки исключения или блока try.
fixed
Ключевое слово создает блок кода с указателем на управляемую переменную и “закрепляет” эту переменную во время выполнения оператора.
float
Тип данных с плавающей запятой, имеет наименьший размер. Занимает 4 байта.
for
Объявление цикла “со счётчиком”.
foreach
Цикл для перебора элементов System.Collections.IEnumerable или System.Collections.Generic.IEnumerable<T>.
goto
Оператор перехода к метке.
if
Оператор проверки условия. Блок кода оператора выполняется, когда условие истинно (true).
implicit
Определение оператора явного преобразования (текущий класс в тип данных).
in
Ключевое слово in используется в следующих случаях:
- Цикл foreach, для определения перебераемого экземпляра коллекции.
- Параметры универсального типа в универсальных интерфейсах и делегатах, для определения контравариантного параметра.
- В качестве модификатора параметра, для задания его непереопределяемым/входным.
- В запосах LINQ, совместно с ключевым словом join.
- В запосах LINQ, совместно с ключевым словом from.
int
Тип данных, представляющий собой 32-разрядное целое число со знаком (System.Int32).
interface
Ключевое слово для определения интерфейса. Интерфейс преставляет собой договор для классов/стуктур для соглашения об их членах.
internal
Ключевое слово используется для ограничения доступа. Оно используется в следующих уровнях доступа:
- internal - доступ ограничивается текущей сборкой;
- protected internal - доступ ограничивается текущей сборкой или типами, которые являются производными от содержащего класса.
is
Оператор проверки типа. Проверяет, совместим ли результат выражения с указанным типом. Возвращает true или false.
lock
Оператор блокировки доступа к объекту. Опертор блокирует объект для других параллельных выполнений, где также используется этот оператор с таким же объектом.
long
Тип данных, представляющий собой 64-разрядное целое число со знаком (System.Int64).
namespace
Ключевое слово для объявления пространства имён.
new
- Опрератор new используется для создания экземпляра типа;
- Используется, как ограничение универсального типа, о том что агрумент типа должен иметь конструктор поумолчанию.
null
Ссылка, которая не ссылается на объект. Может присваиваться для начальной инициализации объектам.
object
Базовый тип данных для объектов. Является псевдонимом System.Object.
operator
Ключевое слово для перегрузки операторов.
out
Ипользуется:
- для передачи параметра по ссылке, а не по значению. Представляет собой выходной параметр;
- для обозначения ковариантных параметров в универсальных типах для интерфейсов и делегатов.
override
Модификатор override нужен для переопределения абстрактной или виртуальной реализации унаследанного метода, свойства, индексатора, события.
params
Ключевое слово для задания массива параметров определённого типа. Это переменное число параметров. Когда параметры не передаются, то передаётся массив нулевого размера. Параметры можно передавать через запятую или в массиве тогоже типа.
private
Ключевое слово используется в двух модификаторах доступа:
- private - lоступ к типу или члену возможен в том же типе реализации класса или структуры (class, struct);
- private protected - то же самое, что и private, но доступ к типу или элементу возможен из типов, производных от объекта class и объявляемых в сборке, содержащей этот объект.
protected
Ключевое слово используется в трёх модификаторах доступа:
- protected - доступ из этого же класса или производного;
- protected internal - используется, как предыдущий уровень доступа (protected), но доступ так же доступен из текущей сборки;
- private protected - доступ для производных классов, но в тойже сборке.
public
Модификатор доступа к типам и их членам с максимальным уровнем доступа, видим всему.
readonly
Ключевое слово, которое может использоваться в четырёх контекстах:
- поле только для чтения. Присваение может происходить сколько угодно раз при объявлении или конструкторе;
- при объявлении структуры, объявление readonly struct определяет, то что структура является неизменяемой;
- при объявлении членой не изменяемой структуры;
- при возвращении значения методом модификатор ref readonly указывает, что ссылка является не изменяемой.
ref
Ключевое слово ref указывает на то, что значение передается по ссылке. Оно используется в четырех разных ситуациях:
- при передаче параметров в метод по ссылке;
- для возвращения методом значения по ссылке;
- в ссылочных локальных переменных;
- в объявлении структуры, чтобы указать, что она хранится в стеке.
return
Используется для завершения функции или возвращения ею результата.
sbyte
Ключевое слово используется для обозначения знакового однобайтового целого числа (от -128 до 127).
sealed
Модификатор класса, запрещающий наследовать этот класс.
short
Тип данных для представления 16-разрядного целого числа со знаком (от -32 768 до 32 767).
sizeof
Опратор для определения числа байт занимаемых переменной.
stackalloc
Ключевое слово stackalloc выделяет блок памяти в стеке.
static
Испольуется для:
- объявления статических членов;
- объявления статических классов;
- в операторе импорта using static, для импорта элементов static из одного типа.
string
Ссылояный тип данных для представления строк (последовательностей символов), является псевдонимом для System.String.
struct
Ключевое слово для создания структуры.
switch
Оператор выбора.
this
Ссылка на текущий экземпляр класса.
throw
Ключевое слово для генерации исключения.
true
Значение истины типа bool.
try
Оператор для объявления блока, в котором перехватывается исключение.
typeof
Оператор для получения System.Type для указанного типа, т.е. получение типа.
uint
Целочисленный тип данных для представлени 32-разрядного числа без знака (от 0 до 4 294 967 295).
ulong
Целочисленный тип данных для представлени 64-разрядного числа без знака (от 0 до 18 446 744 073 709 551 615).
unchecked
Данная инструкция отключает проверку переполнения при арифметических операциях и преобразованиях целочисленных чисел.
unsafe
Ключевое слово unsafe обозначает небезопасный контекст, необходимый для выполнения любых операций с применением указателей.
ushort
Целочисленный тип данных для представлени 16-разрядного числа без знака (от 0 до 65 535).
using
Ключевое слово using используется в двух случаях:
- импорт простанства имён;
- объявление блока кода, с освобождением по окончаию ресурсов переменной.
virtual
Ключевое слово virtual используется для объявления методов, свойств, индексаторов и событий и разрешения их переопределения в производном классе.
void
Используется для того, чтобы обозначить метод, который не возвращает значение.
volatile
Ключевое слово volatile помечает поле и позволяет изменять его нескольким потокам, выполняемых одновременно.
while
Цикл с предусловием.
Контекстные ключевые слова. Описание и примеры
add
Контекстное ключевое слово add используется для определения метода контроля на добавление делегата в событие.
and
Оператор and действует с начала C# 9.0. Он создан для логического объединения шаблонов. Пример:
public static string HowOldIsMen(uint daysOld) => daysOld switch
{
<= 10 => "Новорождённые",
>10 and <= 365 => "Грудной ребёнок",
> 365 and <= (365 * 3) => "Раннее детство",
> (365 * 3) and <= (365 * 7) => "Первый период детства",
> (365 * 7) and <= (365 * 12) => "Второй период детства",
> (365 * 12) and <= (365 * 16) => "Подростковый возраст",
> (365 * 16) and <= (365 * 21) => "Юношеский возраст",
> (365 * 21) and <= (365 * 35) => "Средний возраст (первый период)",
> (365 * 35) and <= (365 * 60) => "Средний возраст (второй период)",
> (365 * 60) and <= (365 * 75) => "Пожилые люди",
> (365 * 75) and <= (365 * 90) => "Старческий возраст",
> (365 * 90) => "Долгожители",
};
alias
Создание именам сборок альтернативных имён. К примеру, используются две сборки с одинаковым полным именем.
ascending
Ключевое слово ascending используется в запросах LINQ для задания порядка сортировки от наименьшего к наибольшему. Пример:
IEnumerable<string> sortedNames =
from name in names
orderby name ascending
select name;
args
Операторы верхнего уровня могут ссылать на переменную args для доступа к аргументам коммандной строки.
if (args.Length > 0)
{
foreach (var arg in args)
{
Console.WriteLine($"Агрумент={arg}");
}
}
else
{
Console.WriteLine("Без аргументов");
}
async
Модификатор async позволяет указать, что метод, лямбда-выражение или анонимный метод является асинхронным.
await
Ключевое слово await имеет несколько назначений:
- оператор await ожидает завершения асинхронной операции;
- оператор await foreach используется для последовательного обхода асинхронного перечисления (IAsyncEnumerable
); - начиная с C# 7.1 метод Main может возвращать Task, а также тип возвращаемого значения Task
, позволяя использовать оператор await в теле.
by
Используется в запросах LINQ для указания способа группировки возвращаемых элементов. Пример:
var query = from emp in employees
group emp by emp.LastName;
descending
Ключевое слово descending используется в запросах LINQ для задания порядка сортировки от наибольшего к наименьшему. Пример:
IEnumerable<string> sortedNames =
from name in names
orderby name descending
select name;
dynamic
Тип dynamic - это тип данный генерируемый во время выполнения, он не проходит проверку компиляции.
equals
Контекстное ключевое слово equals используется в запросах LINQ для настройки выражения join. Пример:
var employeesAndsDepartments =
from dep in departments
join emp in employees on dep.Id equals emp.DepartmentId
select new { EmployeeFullName = emp.FullName, DepartmentName = dep.Name };
from
Выражение запроса LINQ начинается с ключевого слова from. Оно определяет источник данных запроса (после ключевого слова in) и локальную переменную, которая представляет собой отдельный элемент из набора.
get
Ключевое слово get ипользуется в поле и/или индексаторе для получения значения.
global
Псевдоним глобального пространства имён. Пример:
global::System.Console.WriteLine("Привет, Мир!");
group
Контекстное ключевое слово group нужно для группировки в запросах LINQ. Оно возвращает последовательность сгруппированных объектов IGrouping<TKey,TElement>. Пример:
var query = from emp in employees
group emp by emp.LastName;
init
В C# 9 и более поздних версий метод доступа к свойству или индексатору init используется для назначения нового значения только при создании объекта.
into
Контекстное слово into можно применять для создания временного идентификатора для сохранения результатов предложений group, join или select в новый идентификатор.
join
Контекстное слово join нужно для создания связи между двумя коллекциями в запросах LINQ.
let
Контекстное ключевое слово let используется в запросах LINQ для создания промежуточной переменной.
managed (соглашение о вызовах указателей функций)
Указатель функции можно определить, используя ключевое слово delegate*. Их можно определять с ключевыми словами managed или unmanaged. managed используется для создания делегатов на управляемый код.
nameof
Контекстное слово nameof предназначено для получения строковой константы имени, типа или элемента переменной.
nint
Представляет собой 32- или 64-разрядное целое число со знаком, является псевдонимом для System.IntPtr.
not (не)
Оператор not действует с начала C# 9.0. Он создан участия в логических шаблонах как оператор отрицания. Пример:
if (user is not null)
{
// ...
}
notnull
Ограничение notnull пишут, чтобы указать, что аргумент типа должен быть типом значения, не допускающим значения NULL, или ссылочным типом, не допускающим значения NULL. Пример:
class Student<T> where T: notnull
{
// ...
}
nuint
Представляет собой 32- или 64-разрядное целое число без знака, является псевдонимом для System.UIntPtr.
on
Контекстное ключевое слово on используется в предложении соединения выражения запроса LINQ для указания условия соединения. Пример:
var employeesAndsDepartments =
from dep in departments
join emp in employees on dep.Id equals emp.DepartmentId
select new { EmployeeFullName = emp.FullName, DepartmentName = dep.Name };
or
Оператор or действует с начала C# 9.0. Он создан для представления логической дизъюнкции (логического “или”).
orderby
orderby используется в запросах LINQ для задания условия сортировки. Пример:
IEnumerable<string> sortedNames =
from name in names
orderby name descending
select name;
partial (тип)
Контекстное ключевое слово позволяет разделять определения классов, структур, интерфейсов или записей на несколько файлов.
partial (метод)
Контекстное ключевое слово означает, что сигнатура метода содержиться в этом файле, а его реализация в другом.
record
Контекстное ключевое слово record предназначено для определения ссылочного типа, который предоставляет встроенные возможности для инкапсуляции данных. C# 10 позволяет синтаксису record class в качестве синонима уточнить ссылочный тип и record struct определить тип значения с аналогичными функциями. Пример:
public readonly record struct Employee(int Id, int DepartmentId, string FirstName, string LastName);
remove
Контекстное ключевое слово remove используется для определения метода контроля для удаления делегата из события.
select
Контекстное ключевое слово select нужно для того, чтобы указать какое значение будет получено после выполнения запроса LINQ. Пример:
var query = from emp in employees
select emp.LastName
set
Ключевое слово set ипользуется в поле и/или индексаторе для установки значения.
unmanaged (соглашение о вызовах указателей функций)
Указатель функции можно определить, используя ключевое слово delegate*. Их можно определять с ключевыми словами managed или unmanaged. unmanaged используется для создания делегатов на не управляемый код.
unmanaged (ограничение универсального типа)
Ограничение unmanaged пишут, чтобы указать, что аргумент типа является не управляемым типом. Пример:
unsafe public static byte[] GetData<T>(this T argument) where T : unmanaged
{
// ...
}
value
Контекстное ключевое слово value используется в методе доступа set в объявлениях свойства и индексатора для получения присваемого значения.
var
Контекстное ключевое слово var используется для неявно типизированных пременных. Строгий тип для неявно типизированных переменных вычисляется на этапе компиляции. Пример:
var i = 0;
when (условие фильтра)
Для того, чтобы указать условие фильтра в следующих случаях, можно использовать контекстное ключевое слово when:
- в операторе catch блоке try/catch/finally;
- в качестве условия случая в операторе switch.
where (ограничение универсального типа)
Контекстное ключевое слово where используется для указаний ограничений на универсальный тип.
where (предложение запроса)
Контекстное ключевое слово where используется в запросах LINQ для указания условия фильтра объектов. Пример:
IEnumerable<string> aNames =
from name in names
where name != null && name.Length > 0
where name[0] == 'A' || name[0] == 'a'
select name;
with
Контекстное ключевое слово with нужно для создания своего параметра с другими свойствами/полями. Пример:
public record Employee(int Id, int DepartmentId, string FirstName, string LastName);
// ...
var emp1 = new Employee(1, 1, "Иван", "Иванов");
// ...
var emp2 = emp1 with { Id = 2, FirstName = "Пётр"};
yield
Контекстное ключевое слово yield используется в методе, операторе или методе доступа get для того, чтобы наполнить коллекцию результата. Пример форм оператора:
// ...
yield return expression;
// ...
yield break;