## Переменные

| Значимые типы |       | Литерал                     | Ссылочные типы    |                |
| ------------- | ----- | --------------------------- | ----------------- | -------------- |
| 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<int> d1 = new List<int>();

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);
```