Please open Telegram to view this post
VIEW IN TELEGRAM
namespace MyApp {
class Program {
static void Main() {
System.Console.WriteLine("Hello, World!");
}
}
}
Для доступа к элементам из другого пространства имен используется ключевое слово
using
.
using System;
namespace MyApp {
class Program {
static void Main() {
Console.WriteLine("Hello, World!");
}
}
}
Пространства имен упрощают структурирование больших проектов и предотвращают дублирование имен.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
DbSet
соответствует таблице в базе данных, а его элементы — строкам этой таблицы.
public class ApplicationContext : DbContext
{
public DbSet<User> Users { get; set; } // Представляет таблицу Users
}
DbSet
предоставляет методы для добавления, удаления и поиска данных. Например, Add()
добавляет новую сущность, а Find()
ищет по первичному ключу.
var user = new User { Name = "John" };
context.Users.Add(user); // Добавление сущности
context.SaveChanges(); // Сохранение изменений в базе
Используется в Entity Framework для работы с данными в объектно-ориентированном стиле.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
var numbers = new List<int> { 1, 2, 3, 4, 5 };
var evenNumbers = from num in numbers
where num % 2 == 0
select num;
В этом примере LINQ используется для фильтрации чётных чисел из списка. Также LINQ поддерживает методы расширения, такие как
Where
, Select
, OrderBy
, что делает запросы более гибкими и выразительными. LINQ упрощает обработку данных и повышает читаемость кода.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
static
используется для определения членов класса, которые принадлежат самому классу, а не его экземплярам. Статические поля и методы общие для всех объектов класса и могут быть вызваны без создания экземпляра.
class Counter {
public static int Count = 0; // статическое поле
public static void Increment() { // статический метод
Count++;
}
}
Counter.Increment(); // вызов статического метода
Console.WriteLine(Counter.Count); // доступ к статическому полю
- Статические поля инициализируются один раз и существуют на протяжении всего времени работы программы.
- Статические методы могут обращаться только к статическим членам класса.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Action
, Func
и Predicate
— это встроенные делегаты в C#. -
Action
используется для методов, которые не возвращают значение (void). Может принимать от 0 до 16 параметров.
Action<int> printNumber = (x) => Console.WriteLine(x);
-
Func
используется для методов, возвращающих значение. Последний тип в шаблоне указывает тип возвращаемого значения.
Func<int, int, int> sum = (a, b) => a + b;
-
Predicate
— это специализированный делегат, возвращающий bool
. Обычно используется для проверки условий.
Predicate<int> isEven = (x) => x % 2 == 0;
Action
и Func
более универсальны, а Predicate
предназначен для логических проверок.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Логические операторы
- && (И)
Возвращает
- || (ИЛИ)
Возвращает
Пример:
Короткое замыкание позволяет оптимизировать вычисления и избежать ошибок, связанных с выполнением ненужных операций.
Ставь👍 , если было полезно!
Больше ответов на сайте👈
✈️ С# собеседования
&&
(И) и ||
(ИЛИ) используются для выполнения операций над булевыми значениями. - && (И)
Возвращает
true
, если оба операнда истинны. Если первый операнд ложный, второй не вычисляется (короткое замыкание). - || (ИЛИ)
Возвращает
true
, если хотя бы один из операндов истинный. Если первый операнд истинный, второй не вычисляется (короткое замыкание). Пример:
bool a = true, b = false;
bool result1 = a && b; // false, так как b ложное
bool result2 = a || b; // true, так как a истинное
Короткое замыкание позволяет оптимизировать вычисления и избежать ошибок, связанных с выполнением ненужных операций.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Пример:
Func<int, int, int> sum = delegate(int a, int b) { return a + b; };
int result = sum(2, 3); // Результат: 5
Анонимные методы часто заменяются лямбда-выражениями, но могут быть полезны в случаях, когда требуется совместимость с более старыми версиями языка.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
IDisposable
в классе используется шаблон Disposable, который включает финализатор и метод Dispose
. Это позволяет корректно освобождать управляемые и неуправляемые ресурсы.Пример:
public class Resource : IDisposable {
private bool disposed = false;
protected virtual void Dispose(bool disposing) {
if (!disposed) {
if (disposing) {
// Освобождение управляемых ресурсов
}
// Освобождение неуправляемых ресурсов
disposed = true;
}
}
public void Dispose() {
Dispose(true);
GC.SuppressFinalize(this);
}
~Resource() {
Dispose(false);
}
}
Метод
Dispose
вызывается явно для освобождения ресурсов, а финализатор гарантирует очистку, если Dispose
не был вызван.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
AggregateException
— это специальный тип исключения, который используется для объединения нескольких исключений в одно. Это часто происходит в асинхронных операциях или при параллельном выполнении задач, где может возникнуть несколько ошибок одновременно.
try {
Task.WaitAll(task1, task2); // Может выбросить AggregateException
}
catch (AggregateException ex) {
foreach (var innerEx in ex.InnerExceptions) {
Console.WriteLine(innerEx.Message); // Обработка каждого внутреннего исключения
}
}
Этот тип исключения позволяет обработать все ошибки в одном месте.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
int Factorial(int n) {
if (n == 0) // Базовый случай
return 1;
return n * Factorial(n - 1); // Рекурсивный случай
}
Базовый случай предотвращает бесконечную рекурсию, а рекурсивный случай разбивает задачу на более простые подзадачи. Рекурсия часто используется для работы с деревьями, графами и алгоритмами, где задача естественно делится на подзадачи.
Важно учитывать глубину рекурсии, чтобы избежать переполнения стека.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
IAsyncEnumerable<T>
— это интерфейс, который позволяет асинхронно возвращать последовательности данных. Он используется для работы с потоками данных, которые генерируются или извлекаются асинхронно.
async IAsyncEnumerable<int> FetchDataAsync() {
for (int i = 0; i < 10; i++) {
await Task.Delay(100); // Асинхронная задержка
yield return i; // Возврат элемента последовательности
}
}
Для потребления данных используется
await foreach
:
await foreach (var item in FetchDataAsync()) {
Console.WriteLine(item);
}
IAsyncEnumerable<T>
полезен при работе с асинхронными источниками данных, такими как базы данных, сетевые запросы или файловые потоки, где данные поступают постепенно.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM