From 215cfa0a856197c7b9b69b0228c2fec8a5900e98 Mon Sep 17 00:00:00 2001 From: StNicolay Date: Sun, 22 Oct 2023 15:12:32 +0000 Subject: [PATCH] C# 22.10.2023 --- C#/C#.md | 115 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 115 insertions(+) diff --git a/C#/C#.md b/C#/C#.md index aeda88a..fb0d2d6 100644 --- a/C#/C#.md +++ b/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(); // Обращение к функцианалу родителя + } +} +``` + +От статических классов тоже нельзя наследоваться.