C# 22.10.2023

This commit is contained in:
StNicolay 2023-10-22 15:12:32 +00:00
parent f420ecb126
commit 215cfa0a85

115
C#/C#.md
View File

@ -23,6 +23,11 @@ name2 = "Bob";
const string NAME = "Tom";
```
Константы:
* Определяются только во время компиляции
* Неявно являются статичными
## Типы данных
* bool
@ -589,3 +594,113 @@ class Person
}
}
```
### Модификатор *required*
Данный модификатор делает поле или свойство обязательным для инициализации
```C#
Person tom = new Person(); // Ошибка
Person bob = new Person { Name = "Bob" }; // Вот так хорошо
class Person {
public required string Name { get; set; }
}
```
## Перегрузка методов
Перегрузка методов - возможность создать несколько методов, принимающих разное кол-во параметров или разные типы параметров, с одним и тем же именем. Выходной тип не может отличаться.
```C#
int Sum(int a, int b) {
return a + b;
}
int Sum(int a, int b, int c) {
return a + b + c;
}
```
## *static*
Статические поля, методы, свойства относятся ко всему классу. Обращение к ним идёт через сам класс.
Статичные поля инициализируются во время запуска программы и находятся в специальной области памяти для static'ов.
Статические классы могут содержать только статичные поля/свойста/методы.
```C#
static class Person {
public static int retirementAge = 65;
public static int RetirementAge {
get {
return retirementAge;
}
set {
retirementAge = value;
}
}
public static int Foo(int bar) {
return bar + 2;
}
}
```
## Модификатор *readonly*
Полям, которые были объявлены *readoly*, значение можно присваивать только при объявлении или конструкторе
```C#
class Person {
public readonly string name = "Undefined";
public Person(string name) {
this.name = name;
}
public changeName(string name) {
this.name = name; // Ошибка
}
}
readonly struct Person2 {
public readonly string Name { get; }; // Тут readonly не обязательно
public int Age { get; }; // Тоже как-бы readonly
}
```
## Наследование
```C#
Employee tom = new Employee();
tom.Name = "Tom";
tom.PrintName();
class Person {
private string _name = "";
public string Name {
get { return _name; }
set { _name = value }
}
public Person(string name) {
this.name = name;
}
public void PrintName() {
Console.WriteLine(_name)
}
}
sealed class Employee: Person { // sealed запрещает наследование от данного класса
public string company;
public Employee(string name, string company) : base(name) {
this.company = company;
base.PrintName(); // Обращение к функцианалу родителя
}
}
```
От статических классов тоже нельзя наследоваться.