Anonymous Quiz
73%
virtual
14%
abstract
12%
override
1%
sealed
В C# существует множество коллекций, которые предоставляются в стандартной библиотеке .NET. Они делятся на несколько категорий, каждая из которых предназначена для различных сценариев использования. Вот основные типы коллекций:
List<int> numbers = new List<int> { 1, 2, 3, 4 };
numbers.Add(5);
Dictionary<string, int> ages = new Dictionary<string, int>
{
{ "Alice", 30 },
{ "Bob", 25 }
};
int aliceAge = ages["Alice"];
HashSet<string> fruits = new HashSet<string> { "Apple", "Banana" };
fruits.Add("Apple"); // Не добавит дубликат
Queue<string> queue = new Queue<string>();
queue.Enqueue("first");
queue.Enqueue("second");
string item = queue.Dequeue(); // "first"
Stack<string> stack = new Stack<string>();
stack.Push("first");
stack.Push("second");
string item = stack.Pop(); // "second"
LinkedList<int> linkedList = new LinkedList<int>();
linkedList.AddLast(1);
linkedList.AddLast(2);
SortedList<string, int> sortedList = new SortedList<string, int>
{
{ "Alice", 30 },
{ "Bob", 25 }
};
SortedList, но использует бинарное дерево для хранения элементов. SortedDictionary<string, int> sortedDict = new SortedDictionary<string, int>
{
{ "Alice", 30 },
{ "Bob", 25 }
};
SortedSet<int> sortedSet = new SortedSet<int> { 3, 1, 2 };
Dictionary, предназначенная для безопасного использования в многопоточных приложениях. ConcurrentDictionary<string, int> concurrentDict = new ConcurrentDictionary<string, int>();
concurrentDict.TryAdd("Alice", 30);
Queue. ConcurrentQueue<string> concurrentQueue = new ConcurrentQueue<string>();
concurrentQueue.Enqueue("first");
Stack. ConcurrentStack<string> concurrentStack = new ConcurrentStack<string>();
concurrentStack.Push("first");
BlockingCollection<int> blockingCollection = new BlockingCollection<int>(5);
blockingCollection.Add(1);
В C# есть множество коллекций для различных целей, включая
List, Dictionary, HashSet, Queue, Stack, специализированные коллекции, такие как LinkedList, SortedList, а также коллекции для параллельного программирования, такие как ConcurrentDictionary и BlockingCollection.Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
Dependency Injection (DI), или инъекция зависимости, — это шаблон проектирования, который позволяет объектам получить свои зависимости от внешних источников, а не создавать их самостоятельно. Этот подход улучшает тестируемость, расширяемость и поддерживаемость кода, делая его более гибким и модульным.
A использует класс B для выполнения своих задач, то B является зависимостью для A.public class Service
{
private readonly IRepository _repository;
public Service(IRepository repository)
{
_repository = repository;
}
public void DoWork()
{
_repository.Save();
}
}
public class Service
{
public IRepository Repository { get; set; }
public void DoWork()
{
Repository.Save();
}
}
public class Service
{
private IRepository _repository;
public void SetRepository(IRepository repository)
{
_repository = repository;
}
public void DoWork()
{
_repository.Save();
}
}
IoC-контейнеры (контейнеры инверсии управления) управляют созданием и жизненным циклом зависимостей, а также автоматизируют процесс их инъекции. Пример использования популярного IoC-контейнера Autofac:
using Autofac;
var builder = new ContainerBuilder();
builder.RegisterType<Repository>().As<IRepository>();
builder.RegisterType<Service>().As<IService>();
var container = builder.Build();
using (var scope = container.BeginLifetimeScope())
{
var service = scope.Resolve<IService>();
service.DoWork();
}
Dependency Injection (DI) — это метод предоставления зависимостей объекту извне, что делает код более гибким, тестируемым и поддерживаемым. DI может осуществляться через конструкторы, свойства или методы, а IoC-контейнеры автоматизируют процесс управления зависимостями.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Anonymous Quiz
18%
private
9%
protected
61%
internal
13%
protected internal
В C# списки (List) и массивы (Array) являются двумя основными типами коллекций, но они имеют различия в своих свойствах, возможностях и сценариях использования. Рассмотрим основные различия между ними.
int[] numbers = new int[5]; // Массив из 5 элементов
string[] words = new string[] { "apple", "banana", "cherry" };
int firstNumber = numbers[0]; // Быстрый доступ по индексу
Length. int length = numbers.Length; // Длина массива
List<int> numbersList = new List<int> { 1, 2, 3, 4, 5 };
numbersList.Add(6); // Добавление элемента увеличивает размер списка
List<string> wordsList = new List<string> { "apple", "banana", "cherry" };
int firstNumberInList = numbersList[0]; // Быстрый доступ по индексу
Add, Remove, Find, Count и многие другие, что делает их более удобными для работы с динамическими данными. int count = numbersList.Count; // Количество элементов в списке
numbersList.Remove(3); // Удаление элемента
Массив:
int[] numbersArray = new int[] { 1, 2, 3, 4, 5 };
int firstElement = numbersArray[0];
numbersArray[2] = 10;
Console.WriteLine(numbersArray.Length);Список:
List<int> numbersList = new List<int> { 1, 2, 3, 4, 5 };
numbersList.Add(6);
int firstElementInList = numbersList[0];
numbersList[2] = 10;
Console.WriteLine(numbersList.Count);
numbersList.Remove(4);Массивы имеют фиксированный размер и обеспечивают быстрый доступ к элементам, но менее гибкие. Списки имеют динамический размер и предоставляют больше методов для работы с элементами, но могут быть менее эффективны по памяти.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
Anonymous Quiz
22%
virtual
73%
abstract
4%
sealed
1%
static
👍1
В C#
post чаще всего ассоциируется с HTTP POST-запросами, которые используются для отправки данных на сервер. Это один из основных методов HTTP-протокола наряду с GET, PUT, DELETE и другими. Для выполнения HTTP POST-запроса в C# часто используется класс
HttpClient, который предоставляет удобные методы для взаимодействия с веб-сервисами.System.Net.Http (обычно он включен по умолчанию в .NET Core проектах).using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
// Создаем HttpClient
using (HttpClient client = new HttpClient())
{
// URL-адрес, на который отправляется запрос
string url = "https://example.com/api/resource";
// Данные для отправки
var data = new
{
Name = "John Doe",
Age = 30
};
// Сериализуем данные в JSON
string jsonData = Newtonsoft.Json.JsonConvert.SerializeObject(data);
// Создаем содержимое запроса
StringContent content = new StringContent(jsonData, Encoding.UTF8, "application/json");
// Отправляем POST-запрос
HttpResponseMessage response = await client.PostAsync(url, content);
// Проверяем успешность ответа
if (response.IsSuccessStatusCode)
{
Console.WriteLine("Запрос выполнен успешно.");
}
else
{
Console.WriteLine($"Ошибка: {response.StatusCode}");
}
}
}
}
HttpClient используется для отправки HTTP-запросов и получения HTTP-ответов от ресурса, определенного по URI.JsonConvert.SerializeObject.StringContent, который содержит сериализованные данные, кодировку и тип содержимого.PostAsync отправляет POST-запрос на указанный URL с указанным содержимым.IsSuccessStatusCode.HTTP POST-запрос используется для отправки данных на сервер, обычно для создания новых ресурсов. В C# для выполнения POST-запросов часто используется класс
HttpClient, который позволяет отправлять данные в формате JSON или других форматах.Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
В C# и веб-программировании
PUT обычно относится к HTTP PUT-запросам, которые используются для обновления ресурсов на сервере. Это один из основных методов HTTP-протокола наряду с GET, POST, DELETE и другими.Для выполнения HTTP PUT-запроса в C# часто используется класс
HttpClient, который предоставляет удобные методы для взаимодействия с веб-сервисами.System.Net.Http (обычно он включен по умолчанию в .NET Core проектах).using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
// Создаем HttpClient
using (HttpClient client = new HttpClient())
{
// URL-адрес, на который отправляется запрос
string url = "https://example.com/api/resource/1"; // Предполагается, что ресурс с ID 1 уже существует
// Данные для отправки
var data = new
{
Name = "John Doe",
Age = 31 // Обновляем возраст
};
// Сериализуем данные в JSON
string jsonData = Newtonsoft.Json.JsonConvert.SerializeObject(data);
// Создаем содержимое запроса
StringContent content = new StringContent(jsonData, Encoding.UTF8, "application/json");
// Отправляем PUT-запрос
HttpResponseMessage response = await client.PutAsync(url, content);
// Проверяем успешность ответа
if (response.IsSuccessStatusCode)
{
Console.WriteLine("Ресурс успешно обновлен.");
}
else
{
Console.WriteLine($"Ошибка: {response.StatusCode}");
}
}
}
}
HttpClient используется для отправки HTTP-запросов и получения HTTP-ответов от ресурса, определенного по URI.JsonConvert.SerializeObject.StringContent, который содержит сериализованные данные, кодировку и тип содержимого.PutAsync отправляет PUT-запрос на указанный URL с указанным содержимым.HTTP PUT-запрос используется для обновления существующего ресурса или создания ресурса, если он не существует. В C# для выполнения PUT-запросов часто используется класс
HttpClient, который позволяет отправлять данные в формате JSON или других форматах. PUT-запросы идемпотентны, что означает, что многократное выполнение одного и того же запроса приведет к одному и тому же результату.Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
Anonymous Quiz
26%
Func<int>
16%
Action<int>
10%
Predicate<int>
48%
Func<int, string>
В C# и веб-программировании
DELETE обычно относится к HTTP DELETE-запросам, которые используются для удаления ресурсов на сервере. Это один из основных методов HTTP-протокола наряду с GET, POST, PUT и другими.Для выполнения HTTP DELETE-запроса в C# часто используется класс
HttpClient, который предоставляет удобные методы для взаимодействия с веб-сервисами.System.Net.Http (обычно он включен по умолчанию в .NET Core проектах).using System;
using System.Net.Http;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
// Создаем HttpClient
using (HttpClient client = new HttpClient())
{
// URL-адрес, на который отправляется запрос
string url = "https://example.com/api/resource/1"; // Предполагается, что ресурс с ID 1 существует
// Отправляем DELETE-запрос
HttpResponseMessage response = await client.DeleteAsync(url);
// Проверяем успешность ответа
if (response.IsSuccessStatusCode)
{
Console.WriteLine("Ресурс успешно удален.");
}
else
{
Console.WriteLine($"Ошибка: {response.StatusCode}");
}
}
}
}
HttpClient используется для отправки HTTP-запросов и получения HTTP-ответов от ресурса, определенного по URI.DeleteAsync отправляет DELETE-запрос на указанный URL.IsSuccessStatusCode.HTTP DELETE-запрос используется для удаления ресурса на сервере. В C# для выполнения DELETE-запросов часто используется класс
HttpClient, который позволяет отправлять запросы и получать ответы от веб-сервисов. DELETE-запросы идемпотентны, что означает, что многократное выполнение одного и того же запроса приведет к одному и тому же результату — ресурс будет удален.Please open Telegram to view this post
VIEW IN TELEGRAM
Anonymous Quiz
68%
sealed
9%
static
10%
override
13%
private
В HTTP-протоколе используется множество кодов состояния, чтобы указать результат выполнения запросов. Наиболее популярные и часто встречающиеся коды ошибок группируются в диапазоны, каждый из которых указывает на определенный тип ошибки. Вот основные коды ошибок HTTP, которые важно знать:
Эти коды состояния сообщают, что запрос был получен и продолжается обработка.
Эти коды состояния указывают на успешное выполнение запроса.
Эти коды состояния указывают, что клиент должен предпринять дополнительные действия для завершения запроса.
Эти коды состояния указывают на ошибки, которые произошли по вине клиента.
Эти коды состояния указывают на ошибки, произошедшие на сервере.
Наиболее популярные коды ошибок HTTP включают:
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Anonymous Quiz
36%
is
38%
as
16%
cast
10%
typeof
Git — это система контроля версий, которая позволяет разработчикам отслеживать изменения в коде, сотрудничать с другими разработчиками, управлять версиями программного обеспечения и работать над проектами параллельно. Он стал стандартом в индустрии разработки программного обеспечения благодаря своим мощным возможностям и гибкости.
git log
git branch feature-branch
git checkout feature-branch
git merge main
git clone https://github.com/user/repo.git
git pull origin main
git push origin main
git remote add origin https://github.com/user/repo.git
git push -u origin main
git checkout <commit-hash>
git revert <commit-hash>
git init
git clone https://github.com/user/repo.git
git add .
git commit -m "Сообщение коммита"
git status
git log
git branch new-branch
git checkout new-branch
git merge new-branch
git push origin main
git pull origin main
Git нужен для отслеживания изменений в коде, управления версиями, сотрудничества между разработчиками и обеспечения резервного копирования проектов. Это мощная и гибкая система контроля версий, которая стала стандартом в разработке программного обеспечения.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2👍1
Anonymous Quiz
14%
StringBuilder
13%
Array
70%
String
3%
List<T>
Обмен изменениями в базе данных в контексте контроля версий может быть сложным, поскольку базы данных не являются простыми текстовыми файлами и требуют особого подхода для синхронизации изменений. Вот несколько подходов и инструментов, которые можно использовать для управления версиями базы данных и обмена изменениями:
// Пример миграции с использованием Entity Framework
public partial class AddNewTable : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateTable(
name: "NewTable",
columns: table => new
{
Id = table.Column<int>(nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
Name = table.Column<string>(nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_NewTable", x => x.Id);
});
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(name: "NewTable");
}
}
-- Пример SQL-скрипта для добавления нового столбца в таблицу
ALTER TABLE Users ADD BirthDate DATE;
dotnet ef migrations add AddNewTable
dotnet ef database update
flyway migrate
liquibase update
Для обмена изменениями в базе данных используется подход с миграциями, который позволяет управлять изменениями схемы базы данных. Инструменты, такие как Entity Framework Migrations, Flyway и Liquibase, помогают автоматизировать и управлять этим процессом. Миграции и скрипты изменений хранятся в системе контроля версий и применяются последовательно для синхронизации баз данных.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3❤1
Anonymous Quiz
18%
ToList()
22%
FirstOrDefault()
53%
Where()
7%
Count()
В C#
partial классы позволяют определять один и тот же класс, структуру или интерфейс в нескольких файлах. Это удобно для организации кода, особенно при работе с автоматически генерируемыми файлами или при совместной работе нескольких разработчиков над одним классом.public partial class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public void PrintFullName()
{
Console.WriteLine($"{FirstName} {LastName}");
}
}
public partial class Person
{
public int Age { get; set; }
public void PrintAge()
{
Console.WriteLine($"Age: {Age}");
}
}
Person определен в двух отдельных файлах с помощью ключевого слова partial.Person в один класс. В результате, объект Person имеет все свойства и методы, определенные в обоих файлах.class Program
{
static void Main(string[] args)
{
Person person = new Person
{
FirstName = "John",
LastName = "Doe",
Age = 30
};
person.PrintFullName(); // Выведет: John Doe
person.PrintAge(); // Выведет: Age: 30
}
}
partial класса должны быть определены в одном и том же сборочном проекте.partial класса.Partial классы в C# позволяют разделять определение одного класса на несколько файлов. Это удобно для организации кода, совместной разработки и интеграции с инструментами, генерирующими код. Компилятор объединяет все части класса в один, что позволяет работать с ним как с обычным классом.Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Anonymous Quiz
57%
Nullable<T>
15%
Object
6%
Any
23%
T?
В C#
partial методы позволяют объявлять метод в одной части partial класса и определять его реализацию в другой части. Это полезно для сценариев, когда часть класса с методами может быть автоматически сгенерирована, а другая часть может содержать их реализацию, добавляемую вручную разработчиком.Partial метод может быть объявлен в одной части partial класса и (опционально) определен в другой. Если метод не определен, компилятор просто игнорирует его объявление.Partial методы должны быть приватными.public, protected).void).out, но могут иметь параметры ref.public partial class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
partial void OnNameChanged();
public void ChangeName(string firstName, string lastName)
{
FirstName = firstName;
LastName = lastName;
OnNameChanged();
}
}
public partial class Person
{
partial void OnNameChanged()
{
Console.WriteLine($"Name changed to: {FirstName} {LastName}");
}
}
Person объявляется частичный метод OnNameChanged(), который вызывается в методе ChangeName.Person метод OnNameChanged определяется и содержит логику, которая выполняется при изменении имени.ChangeName вызывается и изменяет имя, вызывается метод OnNameChanged, который выводит сообщение на консоль.class Program
{
static void Main(string[] args)
{
Person person = new Person();
person.ChangeName("John", "Doe");
// Выведет: Name changed to: John Doe
}
}
Partial методы в C# позволяют объявлять метод в одной части partial класса и определять его в другой. Они полезны для разделения кода между автоматически генерируемыми и вручную написанными частями. Если метод не определен, компилятор игнорирует его и все его вызовы, что упрощает интеграцию и улучшает организацию кода.Please open Telegram to view this post
VIEW IN TELEGRAM
Anonymous Quiz
25%
async
10%
await
50%
Task
14%
parallel
😁10🤯1👾1