C# 08.10.2020

This commit is contained in:
2023-10-08 08:51:30 +00:00
parent 2a35336a4c
commit a5fa1d7749
2 changed files with 246 additions and 2 deletions

View File

@ -424,6 +424,12 @@ namespace Foo {
public int armor;
public int damage;
public Enemy(int hp, int armor, int damage) {
this.hp = hp;
this.armor = armor;
this.damage = damage;
}
public void Move() {
Console.WriteLine("I am moving");
}
@ -434,3 +440,90 @@ namespace Foo {
}
}
```
Конструкторов может быть несколько
### Инициализаторы
```C#
Person tom = new Person {name = "Tom", company = { title = "Microsoft" }};
class Person {
public string name = "Undefined";
public Company company;
public Person() {
company = new Company();
}
}
class Company {
public string title = "Unknown";
}
```
### Деконструкторы
Деконструкторы - методы, чтобы "разобрать" объект на составные части
```C#
class Person {
public string name;
public string age;
public void Deconstruct(out string personName, out int PersonAge) {
personName = name;
personAge = age;
}
}
```
### Структуры
Структуру - аналог классов с особенностями:
* Храняться на стеке
* Нет наследования: нельзя использовать *abstract*, *virtual*, *protected*
* При присваивании создаются копия
* Имеется ключевое слово with
```C#
Person tom;
tom.name = "Tom";
tom.age = 1;
Person bob = tom with { name = "Bob" };
Person Alice = new Person { name = "Alice", age = 5 };
Person Jan = new Person("Jan", 10);
struct Person
{
public string name;
public int age;
public Person(string name, int age)
{
this.name = name;
this.age = age;
}
}
```
### Типы значений и ссылочные типы
Типы значений (значимые типы) хранятся на стеке. К таким типам относятся:
* Целочисленные значения
* Числа с плавающей точкой
* *decimal*
* *bool*
* *char*
* Перечисления
* Структуры
Ссылочные типы в куче, а ссылка на них в стеке. К ним относятся:
* *string*
* *object*
* Классы
* Интерфейсы
* Делегаты