C# 29.10.2023
This commit is contained in:
		
							
								
								
									
										59
									
								
								C#/C#.md
									
									
									
									
									
								
							
							
						
						
									
										59
									
								
								C#/C#.md
									
									
									
									
									
								
							@@ -672,7 +672,7 @@ readonly struct Person2 {
 | 
				
			|||||||
## Наследование
 | 
					## Наследование
 | 
				
			||||||
 | 
					
 | 
				
			||||||
```C#
 | 
					```C#
 | 
				
			||||||
Employee tom = new Employee();
 | 
					Employee tom = new Employee("Tom", "Org");
 | 
				
			||||||
tom.Name = "Tom";
 | 
					tom.Name = "Tom";
 | 
				
			||||||
tom.PrintName();
 | 
					tom.PrintName();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -700,7 +700,62 @@ sealed class Employee: Person { // sealed запрещает наследова
 | 
				
			|||||||
        this.company = company;
 | 
					        this.company = company;
 | 
				
			||||||
        base.PrintName(); // Обращение к функцианалу родителя
 | 
					        base.PrintName(); // Обращение к функцианалу родителя
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
} 
 | 
					}
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
От статических классов тоже нельзя наследоваться.
 | 
					От статических классов тоже нельзя наследоваться.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Преобразование типов
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Все классы наследуются от Object. Upcasting - неявное преобразование к типу, который находится вверху иерархии классов. Downcasting - явное преобразование типа к производному
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```C#
 | 
				
			||||||
 | 
					Employee tom = new Employee("Tom", "Org");
 | 
				
			||||||
 | 
					tom.Name = "Tom";
 | 
				
			||||||
 | 
					Person person = tom;
 | 
				
			||||||
 | 
					Employee employee = (Employee)person;
 | 
				
			||||||
 | 
					Employee? employee = person as Employee; // null если преобразовать не удалось
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					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 {
 | 
				
			||||||
 | 
					    public string company;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public Employee(string name, string company) : base(name) {
 | 
				
			||||||
 | 
					        this.company = company;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Переопределение
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					> Возможность изменить функцианальность метода родительского класса в дочернем. *virtual* помечает метод для переопределения в базовом классе, а *override* используется в дочернем
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```C#
 | 
				
			||||||
 | 
					class Foo {
 | 
				
			||||||
 | 
					    public virtual void func() {
 | 
				
			||||||
 | 
					        Console.WriteLine("Foo")
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class Bar: Foo {
 | 
				
			||||||
 | 
					    public override void func() {
 | 
				
			||||||
 | 
					        Console.WriteLine("Bar")
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user