C# 08.10.2020
This commit is contained in:
93
C#/C#.md
93
C#/C#.md
@ -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*
|
||||
* Классы
|
||||
* Интерфейсы
|
||||
* Делегаты
|
||||
|
Reference in New Issue
Block a user