## Переменные | Значимые типы | | Литерал | Ссылочные типы | | | ------------- | ----- | --------------------------- | ----------------- | -------------- | | bool | | true, false | **System.Object** | **null** | | byte, sbyte | | 255, -127, 0xFF | String | "Hello world!" | | short, ushort | | -32768, 65535 | **System.Array** | | | int, uint | u | -2147483648, 4294967295 | \*Интерфейсы | | | long, ulong | l, ul | 1l, 18446744073709551615 | \*Делегаты | | | float, double | f, d | 1e-18, 1d | \*Классы | | | decimal | m | 19e20, 1.111111 | | | | char | | 'A', '\\n', '0x78', 'u0420' | | | | DateTime | | | | | | enum | | | | | | struct | | | | | | void | | | | | ## Операторы - Арифметические: `+`, `-`, `/`, `*`, `%`, `++`, `--` - Побитовые: `&`, `|`, `^`, `~`, `<<`, `>>` - Присваивание: `=`, `+=`, `-=`, `*=`, `/=`, `%=`, `...` - Сравнение: `==`, `!=`, `<`, `>`, `<=`, `>=` - Логические: `||`, `&&`, `|` - null-условные операторы и проверки типа и выражения приведения: `??`, `?.`, `|.`, `?[]`, `is`, `as`, `?:` ## Условные конструкции и циклы Условные конструкции: - `if`, `else` - `switch`, `break` - `goto case` - `return` - `throw` Циклы: - `for`, `break` - `foreach`, `continue` - `while` - `do while` ```cs public int Foo(int a) { int b = a + 10; return b; } ``` Стек функции `Foo`: ![Стек функции Foo](../Pictures/01_01.%20Стек%20функции%20Foo.png) ```cs object a = 10; object b = 10; object c = a; object a = 20; ``` Стек и куча для объектов `a`, `b`, `c` на 3 строке: ![Стек и куча для объектов a, b, c на 3 строке](../Pictures/01_02.%20Стек%20и%20куча%20для%20объектов%20a,%20b,%20c%20на%203%20строке.png) Стек и куча для объектов `a`, `b`, `c` на 4 строке: ![Стек и куча для объектов a, b, c на 4 строке](../Pictures/01_03.%20Стек%20и%20куча%20для%20объектов%20a,%20b,%20c%20на%204%20строке.png) ```cs public class Pen { } public void Foo() { var pen = new Pen(); var pen2 = pen; pen = null; pen = new Pen(); } ``` Стек и куча класса `Pen`: ![Стек и куча класса Pen](../Pictures/01_04.%20Стек%20и%20куча%20класса%20Pen.png) ```cs public class Pen { } public void Foo() { var a = new Pen(); Bar(a); } public void Bar(Pen a) { a = new Pen; } ``` Стек и куча класса `Pen` на препоследней строке: ![Стек и куча класса Pen на предпоследней строке](../Pictures/01_05.%20Стек%20и%20куча%20класса%20Pen%20на%20предпоследней%20строке.png) Стек и куча класса `Pen` на последней строке: ![Стек и куча класса Pen на последней строке](../Pictures/01_06.%20Стек%20и%20куча%20класса%20Pen%20на%20последней%20строке.png) ```cs A a = new A(); a.Foo(a:null); public class A { public int B; public void Foo(A a) { Console.WriteLine(a?.ToString()); } } ``` ```cs namespace CSharp2024; SuperClassSuperClass t = new SuperClassSuperClass(); var d = new SuperClassSuperClass(); SuperClassSuperClass e = new(); List d1 = new List(); class SuperClassSuperClass { } public static void Main(string[] args) { } ``` ```cpp namespace CSharpHelp2024 { internal class A { } } namespace CSharpHelp2024.Classes { internal class A { } } ``` ## Массивы ```cs тип_переменной[] имя массива; int[] array0 = new int[1]; int[,] array1 = new int[2, 3]; int[,] array2 = { {0, 1}, {2, 3, 4} } ``` ## Кортежи ```cs var tuple = (5, 10); private static (string name, int age) GetTuple((string n, int a) tuple, int x) { var result = (name: tuple.n, age:tuple.a + x); return result; } ``` ## Методы ```cs [модификаторы] тип_возвращаемого_значения ИмяМетода ([параметры]) { // тело метода } ``` Параметры: - `ref` - `in` - `out` - `params` ## Модификаторы доступа - `public` - `internal` - `protected` - `private` - `private protected` - `protected internal` ```cs namespace CSharpHelp2024.Classes; internal class B { private int[] a; public B() { } public void Foo(ref int a, in int b, out int c) { c = b; a = a + 1; } } using CSharpHelp2024.Classes; B a = new(); int b = 10; a.Foo(a:ref b, in b, out b); Console.WriteLine(b); ```