Skip to content

Instantly share code, notes, and snippets.

View sunmeat's full-sized avatar
🐈
MEOW

Oleksandr Zahoruiko sunmeat

🐈
MEOW
View GitHub Profile
@sunmeat
sunmeat / Program.cs
Created October 7, 2025 08:03
упаковка та розпаковка C#
/*
Boxing — це перетворення value type (наприклад, int, struct) на reference type (object),
а unboxing — навпаки.
Це базова фішка C# для уніфікації типів, але зі своїми "підводними каменями".
Чому це важливо?
1. Продуктивність та пам'ять: Boxing створює об'єкт на heap, що викликає алокацію
(24+ байт на int) і додатковий тиск на Garbage Collector (GC).
У високонавантажених додатках (ігри, сервери) це призводить до пауз GC, лагів і витоків пам'яті.
@sunmeat
sunmeat / Program.cs
Created October 7, 2025 07:20
методи класу Object
using System.Text;
/*
в дот нет усі типи, включно з простими типами даних та користувацькими типами
(класи, структури, перелічення тощо), є похідними від базового класу system.object
цей клас є частиною простору імен system і надає низку загальних методів та функціональності для всіх об'єктів у c#
методи класу object:
@sunmeat
sunmeat / Program.cs
Created October 7, 2025 06:43
extension methods C#
using System.Text;
/*
методи розширення в c# дозволяють додавати нові методи до наявних типів
без зміни їхнього визначення
це досягається за допомогою статичного методу, який приймає об'єкт, до якого застосовується
розширення, як перший параметр
@sunmeat
sunmeat / Program.cs
Last active October 7, 2025 06:30
as is operators C#
using System.Text;
class Program
{
static void Main()
{
Console.OutputEncoding = Encoding.UTF8;
// у .net оператори as та is використовуються для перевірок та перетворень типів даних
@sunmeat
sunmeat / Program.cs
Created October 7, 2025 06:06
vtable C#
using System.Text;
// https://pnguyen.au/posts/virtual-new-override-csharp/
// https://habr.com/ru/companies/clrium/articles/344556/ !!!
// https://github.com/dotnet/runtime/blob/main/src/coreclr/vm/methodtable.h
class Dog
{
// в clr кожен об'єкт так само має прихований "вказівник" на таблицю в.методів (methodtable) на початку - як __vfptr у c++.
// ця таблиця статична для класу і містить адреси віртуальних методів (vtable слоти).
@sunmeat
sunmeat / Program.cs
Created October 7, 2025 05:07
early binding + reference array C#
class Transport
{
public void Drive()
{
Console.WriteLine("Transport::Drive()");
}
}
class Car : Transport
{
@sunmeat
sunmeat / Program.cs
Created October 7, 2025 05:02
early binding C#
class Transport
{
public void Drive()
{
Console.WriteLine("Transport::Drive()");
}
}
class Car : Transport
{
@sunmeat
sunmeat / Program.cs
Created October 6, 2025 12:51
hiding, shadowing, sealed
using System.Text;
class BaseClass
{
// приховування полів: поле в базовому класі
public int field = 10;
// статичний метод для приховування
public static void StaticMethod()
{
@sunmeat
sunmeat / task.md
Created October 6, 2025 12:00
ДЗ на перевантаження операцій, індексатори та властивості

Перевантаження операторів, Індексатори та Властивості

Частина 1: Перевантаження операторів для класів Student та Group

Опис

Реалізуйте перевантаження операторів для класів Student і Group. Логіка порівняння базується на середньому балі для студентів та кількості студентів для груп.

Вимоги для класу Student

  1. Оператор ==: Порівняння студентів за середнім балом по оцінках. Якщо середній бал однаковий — повернути true, якщо різні — false.
  2. Оператори > та <: Порівняння студентів за середнім балом (вищий бал — "більший" студент).
@sunmeat
sunmeat / Program.cs
Created October 6, 2025 11:55
properties example C#
using System.Text;
namespace PropertiesExample
{
/*
у .net властивості (properties) — це компоненти класу, які надають гнучкий механізм
для читання, запису або обчислення значень полів.
вони часто використовуються як заміна публічних полів для контролю доступу
та модифікації даних.