C# 12.11.2023
This commit is contained in:
parent
f5250f2699
commit
300f663b50
111
C#/C#.md
111
C#/C#.md
@ -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;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Оценка сложности
|
||||||
|
|
||||||
|
> В программировании, вычислительную скорость алгоритмов обычно оценивают по количеству действий, который выполняет алгоритм, и по количеству используемой памяти
|
||||||
|
Reference in New Issue
Block a user