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";
|
const string NAME = "Tom";
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Константы:
|
||||||
|
|
||||||
|
* Определяются только во время компиляции
|
||||||
|
* Неявно являются статичными
|
||||||
|
|
||||||
## Типы данных
|
## Типы данных
|
||||||
|
|
||||||
* bool
|
* 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