From a5fa1d774955a44893f90f878050bdbf36f8f3aa Mon Sep 17 00:00:00 2001 From: StNicolay Date: Sun, 8 Oct 2023 08:51:30 +0000 Subject: [PATCH] C# 08.10.2020 --- C#/C#.md | 93 +++++++++++++++++++++++++++++++ Java/Java.md | 155 ++++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 246 insertions(+), 2 deletions(-) diff --git a/C#/C#.md b/C#/C#.md index 17d8efd..c32b5b3 100644 --- a/C#/C#.md +++ b/C#/C#.md @@ -424,6 +424,12 @@ namespace Foo { public int armor; public int damage; + public Enemy(int hp, int armor, int damage) { + this.hp = hp; + this.armor = armor; + this.damage = damage; + } + public void Move() { Console.WriteLine("I am moving"); } @@ -434,3 +440,90 @@ namespace Foo { } } ``` + +Конструкторов может быть несколько + +### Инициализаторы + +```C# +Person tom = new Person {name = "Tom", company = { title = "Microsoft" }}; + +class Person { + public string name = "Undefined"; + public Company company; + + public Person() { + company = new Company(); + } +} + +class Company { + public string title = "Unknown"; +} +``` + +### Деконструкторы + +Деконструкторы - методы, чтобы "разобрать" объект на составные части + +```C# +class Person { + public string name; + public string age; + + public void Deconstruct(out string personName, out int PersonAge) { + personName = name; + personAge = age; + } +} +``` + +### Структуры + +Структуру - аналог классов с особенностями: + +* Храняться на стеке +* Нет наследования: нельзя использовать *abstract*, *virtual*, *protected* +* При присваивании создаются копия +* Имеется ключевое слово with + +```C# +Person tom; +tom.name = "Tom"; +tom.age = 1; +Person bob = tom with { name = "Bob" }; +Person Alice = new Person { name = "Alice", age = 5 }; +Person Jan = new Person("Jan", 10); + +struct Person +{ + public string name; + public int age; + + public Person(string name, int age) + { + this.name = name; + this.age = age; + } +} +``` + +### Типы значений и ссылочные типы + +Типы значений (значимые типы) хранятся на стеке. К таким типам относятся: + +* Целочисленные значения +* Числа с плавающей точкой +* *decimal* +* *bool* +* *char* +* Перечисления +* Структуры + +Ссылочные типы в куче, а ссылка на них в стеке. К ним относятся: + +* *string* +* *object* +* Классы +* Интерфейсы +* Делегаты diff --git a/Java/Java.md b/Java/Java.md index 415b043..17542ec 100644 --- a/Java/Java.md +++ b/Java/Java.md @@ -167,16 +167,167 @@ try { } ``` -### Throw +### *throw* ```Java throw new Exception("Very important exception! Don't you dare not handle it"); ``` -### Throws +### *throws* Позволяет кинуть ошибку вверх по стаку ```Java public static void main(String[] args) throws Exception {} ``` + +## OOP + +OOP - бяка, Java - OOP => Java - бяка + +```Java +public class Foo { + int bar; + string baz; + + void fooBar() { + System.out.println("FooBaz"); + } +} +``` + +### Модификаторы доступа + +* public - везде +* private - только внутри класса +* protected - подклассы и сам класс + +Если не указан, то применяется модификатор по умолчанию. Он делает переменную public в пределах данного пакета + +### Конструктор и инициализатор + +```Java +public class Test { + int age; + int age2; + int age3; + + // Блок - инициализатор + { + age = 5 + } + + // Конструктор + public Test(int age2, int age3_input) { + this.age2 = age2; + age3 = age3_input; // Такое не делать, ибо не красиво + } +} +``` + +### Наследование + +```Java +public class Foo {} + +public class Bar extends Foo {} +``` + +Множественное наследование низя. Приватное не наследуется + +#### *Override* + +```Java +class Foo { + int foo() { + return 5; + } +} + +class Bar extends Foo { + @Override + int foo() { + return 6; + } +} +``` + +Уровень видимости при *Override* не может понижаться. У переопределённого метода должен быть такой же интерфейс, как и у родителя + +#### *super* + +*super* позволяет обратиться к методам родительского класса + +```Java +class Foo { + int foo() { + return 5; + } +} + +class Bar extends Foo { + @Override + int foo() { + return super.foo(); + } +} +``` + +#### *final* при наследовании + +*final* запрещает наследование + +#### Наследование конструктора + +```Java +class Foo { + int a, b; + + Foo(int a, int b) { + this.a = a; + this.b = b; + } +} + +class Bar extends Foo { + int c; + + Bar(int a, int b, int c) { + // Тут super должен быть сверху, иначе ошибка + super(a, b); + this.c = c; + } +} +``` + +#### *instanceof* + +Позволяет проверить, создан ли объект на основе какого-то класса + +```Java +class Foo { + int a, b; + + Foo(int a, int b) { + this.a = a; + this.b = b; + } +} + +class Bar extends Foo { + int c; + + Bar(int a, int b, int c) { + // Тут super должен быть сверху, иначе ошибка + super(a, b); + this.c = c; + } +} + +class Main { + public static void main() { + Bar bar = new Bar(); + System.out.println(bar instanceof Foo); + } +} +```