C# 15.10.2023

This commit is contained in:
StNicolay 2023-10-15 08:54:36 +00:00
parent 082000b21d
commit 23b1b7d778

View File

@ -510,7 +510,7 @@ struct Person
### Типы значений и ссылочные типы ### Типы значений и ссылочные типы
Типы значений (значимые типы) хранятся на стеке. К таким типам относятся: Типы значений (значимые типы) хранятся на стеке. При присваивании значимых типов создаётся копия. К таким типам относятся:
* Целочисленные значения * Целочисленные значения
* Числа с плавающей точкой * Числа с плавающей точкой
@ -520,10 +520,72 @@ struct Person
* Перечисления * Перечисления
* Структуры * Структуры
Ссылочные типы в куче, а ссылка на них в стеке. К ним относятся: Ссылочные типы в куче, а ссылка на них в стеке. При присваивании ссылочных типов копируется только ссылка. К ним относятся:
* *string* * *string*
* *object* * *object*
* Классы * Классы
* Интерфейсы * Интерфейсы
* Делегаты * Делегаты
## Пространства имён
Пространства имён позволяют организовыывать код программы в логические блоки
```C#
namespace Foo {
namespace Bar {
class Baz {}
}
}
```
Пространство имён подключается с помощью *using*
```C#
using Foo;
using Foo.Bar; // Для этого снача using Foo писать не надо
global using Foo.Bar; // Подключает этот namespace везде. Зачастую такое в файле GlobalUsings.cs
```
## Модификаторы доступа
* *private* - только в рамках класса/структуры (по умолчанию для полей)
* *private protected* - в рамках класса и наследников внутри сборки
* *file* - только в текущем файле
* *protected* - внутри класса и наследниках, которые могут находиться в других сборках
* *internal* - доступен только внутри сборки (по умолчанию для классов)
* *protected internal* - доступен из любого места в сборке и классах наследниках, которые могут быть в других сборках
* *public* - достпупен везде
## Свойства
```C#
class Person {
string name = "Undefined";
public string Name {
get {
return name;
}
set {
name = value;
}
}
}
```
Можно и так
```C#
class Person
{
public string Name { get; set; }
public int Age { get; set; } = 69;
public Person(string name) {
this.Name = name;
}
}
```