C# 22.10.2023
This commit is contained in:
parent
f420ecb126
commit
215cfa0a85
115
C#/C#.md
115
C#/C#.md
@ -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(); // Обращение к функцианалу родителя
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
От статических классов тоже нельзя наследоваться.
|
||||
|
Reference in New Issue
Block a user