C# 12.11.2023

This commit is contained in:
StNicolay 2023-11-12 09:00:57 +00:00
parent f5250f2699
commit 300f663b50

111
C#/C#.md
View File

@ -715,6 +715,11 @@ tom.Name = "Tom";
Person person = tom; Person person = tom;
Employee employee = (Employee)person; Employee employee = (Employee)person;
Employee? employee = person as Employee; // null если преобразовать не удалось Employee? employee = person as Employee; // null если преобразовать не удалось
if (person is Employee employee) {
Console.WriteLine(employee.company);
} else {
Console.WriteLine("Преобразовать низя");
}
class Person { class Person {
private string _name = ""; private string _name = "";
@ -746,16 +751,114 @@ sealed class Employee: Person {
> Возможность изменить функцианальность метода родительского класса в дочернем. *virtual* помечает метод для переопределения в базовом классе, а *override* используется в дочернем > Возможность изменить функцианальность метода родительского класса в дочернем. *virtual* помечает метод для переопределения в базовом классе, а *override* используется в дочернем
```C#
class Foo
{
public virtual void func()
{
Console.WriteLine("Foo");
}
public virtual int Baz
{
get => 5;
set { Console.WriteLine(value); }
}
}
class Bar : Foo
{
public override sealed void func() // sealed запрещает дальнейшее переопределение
{
Console.WriteLine("Bar");
}
public override int Baz
{
get => 6;
}
}
```
## Shadowing / Hiding
```C# ```C#
class Foo { class Foo {
public virtual void func() { public const string class_ = "Foo";
Console.WriteLine("Foo") public int Baz {
get => 5;
}
public void Print() {
Console.WriteLine("Foo");
} }
} }
class Bar : Foo { class Bar : Foo {
public override void func() { public new const string class_ = "Bar";
Console.WriteLine("Bar") public new int Baz {
get => 6;
}
public new void Print() {
Console.WriteLine("Bar");
} }
} }
``` ```
## Абстрактные классы
> Для представления сущностей, не имеющих конкретного воплощения, предназначены абстрактные классы. От них нельзя создать объект. Абстрактный класс может содержать абстрактные методы и свойства, которые не могут быть private. Абстрактные методы не имеют тела. Все не абстрактные наследники должны определять все абстрактные методы и свойствая
```C#
abstract class Transport
{
public abstract void Move();
public abstract string Name
{
get;
set;
}
}
class Car : Transport
{
public override void Move()
{
Console.WriteLine("Car moves");
}
public override string Name { get; set; } = "Car";
}
```
## Обобщения (generics)
```C#
Person<int> fooBar = new Person<int>(10, "Foobar"); // или new(10, "Foobar")
int x = 5;
int y = 10;
Swap<int>(ref x, ref y) // или Swap(ref x, ref y)
class Person<T>
{
public T Id { get; }
public string Name { get; }
public Person(T id, string name)
{
Id = id;
Name = name;
}
}
void Swap<T>(ref T x, ref T y) {
T tmp = x;
x = y;
y = tmp;
}
```
## Оценка сложности
> В программировании, вычислительную скорость алгоритмов обычно оценивают по количеству действий, который выполняет алгоритм, и по количеству используемой памяти