Событие — это механизм, позволяющий объектам уведомлять другие объекты о произошедших действиях. События часто используются в графических интерфейсах для обработки пользовательских действий, таких как нажатия кнопок.
✔️ События объявляются с использованием делегатов. Делегат определяет сигнатуру метода, который будет вызван при возникновении события. 
✔️ Для вызова события используется метод, который проверяет, есть ли подписчики:
Ставь👍 , если было полезно!
Больше ответов на сайте👈 
✈️  С# собеседования
public delegate void EventHandler(object sender, EventArgs e);
public event EventHandler MyEvent;
protected virtual void OnMyEvent(EventArgs e)
{
MyEvent?.Invoke(this, e);
}
Ставь
Больше ответов на сайте
Please open Telegram to view this post
    VIEW IN TELEGRAM
  👍7🔥1
  В C# стандартный делегат для обработки событий - EventHandler, который принимает два параметра: object sender (источник события) и EventArgs e (аргументы события).
Пример объявления и использования:
public event EventHandler MyEvent;
private void OnMyEvent()
{
MyEvent?.Invoke(this, EventArgs.Empty);
}
// Подписка на событие
someObject.MyEvent += HandleMyEvent;
private void HandleMyEvent(object sender, EventArgs e)
{
// Обработка события
}
Event Handler позволяет реализовать слабую связность между компонентами и является ключевым элементом событийно-ориентированного программирования.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
    VIEW IN TELEGRAM
  👍5❤1🔥1🤔1
  Композиция и агрегация — это два типа отношений между объектами в объектно-ориентированном программировании.
➡️  Композиция — это сильная связь, при которой один объект владеет другим и отвечает за его жизненный цикл. Если контейнерный объект уничтожается, то и содержащийся объект тоже уничтожается. Пример: класс "Автомобиль" и класс "Двигатель".
➡️  Агрегация — это более слабая связь, где объект может существовать независимо от контейнера. Пример: класс "Университет" и класс "Студент". Студент может существовать вне университета.
Ставь👍 , если было полезно!
Больше ответов на сайте👈 
✈️  С# собеседования
Ставь
Больше ответов на сайте
Please open Telegram to view this post
    VIEW IN TELEGRAM
  👍5🔥2
  async и await — ключевые слова, которые упрощают работу с асинхронным программированием. async используется для обозначения метода как асинхронного, что позволяет выполнять операции без блокировки основного потока. Такой метод возвращает Task или Task<T>. await применяется внутри асинхронного метода для приостановки выполнения до завершения асинхронной операции. Это позволяет писать асинхронный код, который выглядит как синхронный, улучшая читаемость и поддерживаемость.Ставь
Больше ответов на сайте
Please open Telegram to view this post
    VIEW IN TELEGRAM
  👍5❤1🤔1
  public class Person
{
public required string Name { get; init; }
public int Age { get; init; }
}
// Использование
var person = new Person { Name = "Alice", Age = 30 }; // Корректно
var personWithoutName = new Person { Age = 25 }; // Ошибка: Name обязателен
Ставь
Больше ответов на сайте
Please open Telegram to view this post
    VIEW IN TELEGRAM
  👍6🔥5
  Для сериализации и десериализации объектов в C# используется пространство имен 
🔘 Сериализация: создается объект 
🔘 Десериализация: используется метод 
Ставь👍 , если было полезно!
Больше ответов на сайте👈 
✈️  С# собеседования
System.Runtime.Serialization. Один из популярных способов — использование DataContractSerializer.DataContractSerializer, которому передается тип объекта. Затем вызывается метод WriteObject, который записывает объект в поток.ReadObject, который считывает объект из потока.using System.Runtime.Serialization;
using System.IO;
[DataContract]
class Person
{
[DataMember]
public string Name { get; set; }
}
var person = new Person { Name = "John" };
var serializer = new DataContractSerializer(typeof(Person));
using (var stream = new FileStream("person.xml", FileMode.Create))
{
serializer.WriteObject(stream, person);
}
using (var stream = new FileStream("person.xml", FileMode.Open))
{
var deserializedPerson = (Person)serializer.ReadObject(stream);
}
Ставь
Больше ответов на сайте
Please open Telegram to view this post
    VIEW IN TELEGRAM
  👍6❤3
  Object является фундаментальной концепцией, поскольку все классы неявно наследуются от Object, даже если это не указано явно. Это означает, что каждый класс автоматически получает набор методов, определённых в Object, таких как ToString(), Equals(), GetHashCode() и GetType().ToString() возвращает строковое представление объекта, что полезно для отладки и логирования. Equals() позволяет сравнивать объекты на равенство, а GetHashCode() возвращает числовое значение, используемое в хеш-таблицах. GetType() предоставляет информацию о типе объекта во время выполнения.Object обеспечивает базовую функциональность и полиморфизм, позволяя использовать объекты разных типов в унифицированной манере. Это также упрощает работу с коллекциями, такими как ArrayList, которые могут хранить объекты любого типа.Ставь
Больше ответов на сайте
Please open Telegram to view this post
    VIEW IN TELEGRAM
  👍6🔥1
  static используется для объявления членов класса, которые принадлежат самому классу, а не его экземплярам. Такие методы и свойства можно вызывать без создания объекта класса. Например:public static class MathUtilities
{
public static int Add(int a, int b)
{
return a + b;
}
}
readonly применяется для полей, значения которых могут быть установлены только один раз — либо при объявлении, либо в конструкторе класса. Это обеспечивает неизменяемость данных после инициализации. Пример:public class Configuration
{
public readonly string ConnectionString;
public Configuration(string connectionString)
{
ConnectionString = connectionString;
}
}
Использование
static и readonly помогает создавать более предсказуемый и безопасный код, улучшая его читаемость и поддержку.Ставь
Больше ответов на сайте
Please open Telegram to view this post
    VIEW IN TELEGRAM
  👍10❤1
  Слабые ссылки (Weak References) позволяют ссылаться на объекты, не препятствуя их сборке мусора. Это полезно, когда необходимо отслеживать объект, но не удерживать его в памяти, если он больше не используется.
🟢 Слабая ссылка создается с помощью класса 
🟢 Чтобы получить объект, нужно проверить его доступность:
Если объект был собран,
Ставь👍 , если было полезно!
Больше ответов на сайте👈 
✈️  С# собеседования
WeakReference. Например:WeakReference weakRef = new WeakReference(someObject);
if (weakRef.IsAlive)
{
var obj = weakRef.Target;
}
Если объект был собран,
weakRef.Target вернет null. Слабые ссылки помогают управлять памятью, избегая утечек.Ставь
Больше ответов на сайте
Please open Telegram to view this post
    VIEW IN TELEGRAM
  👍9🔥1
  // Создание делегата с анонимным методом
Action<int> printSquare = delegate(int x)
{
// Вывод квадрата числа
Console.WriteLine(x * x);
};
// Вызов анонимного метода
printSquare(5); // Вывод: 25
Ставь
Больше ответов на сайте
Please open Telegram to view this post
    VIEW IN TELEGRAM
  👍8✍1
  public class WeakEventSource<TEventArgs> where TEventArgs : EventArgs {
    private readonly List<WeakReference<EventHandler<TEventArgs>>> handlers = new();
    public void Subscribe(EventHandler<TEventArgs> handler) {
        handlers.Add(new WeakReference<EventHandler<TEventArgs>>(handler));
    }
    public void Raise(object sender, TEventArgs e) {
        handlers.RemoveAll(h => !h.TryGetTarget(out _));
        foreach (var weakHandler in handlers) {
            if (weakHandler.TryGetTarget(out var handler)) {
                handler(sender, e);
            }
        }
    }
}Ставь
Больше ответов на сайте
Please open Telegram to view this post
    VIEW IN TELEGRAM
  👍6🔥2
  C# собеседования pinned «ℹ️ Подписывайся на наши новые каналы!  🖥  JS собеседования 🖥  Backend собеседования»
  Please open Telegram to view this post
    VIEW IN TELEGRAM
  🔥6👍3
  Интерфейс 
Ставь👍 , если было полезно!
Больше ответов на сайте👈 
✈️  С# собеседования
IDisposable используется для освобождения неуправляемых ресурсов, таких как файлы, сетевые соединения и другие ресурсы, которые требуют явного освобождения. Реализация IDisposable включает метод Dispose, который освобождает ресурсы.public class ResourceHolder : IDisposable
{
private bool disposed = false;
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
if (!disposed)
{
if (disposing)
{
// Освобождение управляемых ресурсов
}
// Освобождение неуправляемых ресурсов
disposed = true;
}
}
~ResourceHolder()
{
Dispose(false);
}
}
IDisposable позволяет управлять ресурсами, предотвращая утечки памяти.Ставь
Больше ответов на сайте
Please open Telegram to view this post
    VIEW IN TELEGRAM
  👍8❤2
  Класс 
1⃣  
2⃣  
3⃣   
Ставь👍 , если было полезно!
Больше ответов на сайте👈 
✈️  С# собеседования
Parallel из пространства имен System.Threading.Tasks упрощает многопоточность, позволяя выполнять циклы и вызовы методов параллельно.Parallel.For используется для параллельного выполнения цикла for. Он автоматически распределяет итерации между потоками.Parallel.For(0, 10, i => {
    Console.WriteLine($"Processing {i}");
});Parallel.ForEach аналогичен, но применяется к коллекциям.var items = new List<int> { 1, 2, 3, 4, 5 };
Parallel.ForEach(items, item => {
    Console.WriteLine($"Processing {item}");
});Parallel.Invoke позволяет выполнять несколько действий одновременно.Parallel.Invoke(
() => Console.WriteLine("Task 1"),
() => Console.WriteLine("Task 2")
);
Ставь
Больше ответов на сайте
Please open Telegram to view this post
    VIEW IN TELEGRAM
  👍12🔥1
  public class Animal
{
public virtual void Speak()
{
// Базовая реализация
Console.WriteLine("Animal speaks");
}
}
public class Dog : Animal
{
public override void Speak()
{
// Переопределение метода
Console.WriteLine("Dog barks");
}
}
Ставь
Больше ответов на сайте
Please open Telegram to view this post
    VIEW IN TELEGRAM
  👍14💯1
  Please open Telegram to view this post
    VIEW IN TELEGRAM
  👍9🔥3🤔1
  CLR (Common Language Runtime) — это виртуальная машина, являющаяся частью .NET Framework, которая управляет выполнением программ, написанных на языках, поддерживающих .NET, таких как C#. Основные функции CLR включают:
1️⃣   Управление памятью: автоматическое управление памятью через сборку мусора.
2️⃣  Обеспечение безопасности: проверка типов и защита кода.
3️⃣  Обработка исключений: централизованная обработка ошибок.
4️⃣  Поддержка многопоточности: управление потоками выполнения.
CLR позволяет разрабатывать приложения с высокой производительностью и безопасностью, абстрагируя детали низкоуровневого управления ресурсами.
Ставь👍 , если было полезно!
Больше ответов на сайте👈 
✈️  С# собеседования
CLR позволяет разрабатывать приложения с высокой производительностью и безопасностью, абстрагируя детали низкоуровневого управления ресурсами.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
    VIEW IN TELEGRAM
  👍5🔥1
  Please open Telegram to view this post
    VIEW IN TELEGRAM
  👍8🔥1
  
// Объявление делегата, который принимает два целых числа и возвращает целое число
public delegate int Operation(int x, int y);
// Метод, соответствующий делегату
public int Add(int a, int b)
{
return a + b;
}
// Использование делегата
Operation op = Add;
int result = op(3, 4); // Вызов метода через делегат
Ставь
Больше ответов на сайте
Please open Telegram to view this post
    VIEW IN TELEGRAM
  👍9🔥1
  
using System;
// Класс Singleton
public class Singleton {
private static Singleton instance;
// Приватный конструктор
private Singleton() {}
// Метод для получения единственного экземпляра
public static Singleton Instance {
get {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
public void ShowMessage() {
Console.WriteLine("Singleton instance");
}
}
class Program {
static void Main() {
Singleton singleton = Singleton.Instance;
singleton.ShowMessage(); // Вывод: Singleton instance
}
}
Singleton закрыт, чтобы предотвратить создание новых экземпляров. Метод Instance обеспечивает доступ к единственному экземпляру.Ставь
Больше ответов на сайте
Please open Telegram to view this post
    VIEW IN TELEGRAM
  👍7🤔2🤩1
  