C#-о-мания | Unity | СИ | Юнити @csh_mania Channel on Telegram

C#-о-мания | Unity | СИ | Юнити

@csh_mania


Канал о программировании на C# и все, что с этим связано

Реклама на канале - @badmaizanov
csharp cisharp си шарп Unity юнити

C#-о-мания | Unity | СИ | Юнити (Russian)

Добро пожаловать в C#-о-манию | Unity | СИ | Юнити! Этот канал посвящен программированию на C# и всему, что с этим связано. Если вы увлечены разработкой программного обеспечения, созданием игр на Unity или изучением языка программирования C#, то этот канал именно для вас! Здесь вы найдете полезные советы, инструкции, новости и многое другое, что поможет вам улучшить свои навыки в программировании. Подпишитесь на наш канал и будьте в курсе всех последних трендов в мире C# и Unity! Не упустите возможность стать лучшим разработчиком благодаря нашим рекомендациям и ресурсам. Присоединяйтесь к нам прямо сейчас и начните свой путь к успеху в программировании! Реклама на канале - @badmaizanov. csharp cisharp си шарп Unity юнити

C#-о-мания | Unity | СИ | Юнити

21 Nov, 10:31


🚀 Новый метод LINQ в .NET 9, который упростит вашу жизнь - встречайте CountBy!

В .NET 9 команда Microsoft продолжает добавлять и оптимизировать имеющийся функционал в библиотеке LINQ, и одним из нововведений стал метод CountBy. Этот метод открывает новые возможности для удобной и лаконичной работы с данными, позволяя эффективно группировать элементы и подсчитывать их количество.

🔍Как работает новый метод?
- Группирует элементы по заданному ключу;
- Подсчитывает количество элементов в каждой группе;
- Возвращает результат в виде коллекции пар «ключ-значение».

Ранее, чтобы, например, подсчитать количество вхождений каждого символа в заданной строке, необъодимо было выполнить следующие манипуляции:

var charCounts = input
.Where(c => !char.IsWhiteSpace(c))
.GroupBy(c => c)
.Select(group => new { Key = group.Key, Count = group.Count() });


Теперь CountBy делает этот процесс проще и менее подверженным ошибкам. Тот же алгоритм реализуется следующим кодом:

var charCounts = input
.Where(c => !char.IsWhiteSpace(c))
.CountBy(c => c);


🍰Что скажете? Очередная сахарная сладость или годное?

C#-о-мания | Unity | СИ | Юнити

21 Nov, 09:31


Погрузитесь в мир высокотехнологичных решений и узнайте, как создать интерактивные веб-приложения с помощью SignalR! Регистрируйтесь на бесплатный вебинар: https://clck.ru/3EidRx?erid=LjN8KLSvz

1. Зачем использовать SignalR: Узнайте, какие задачи решает эта мощная технология и почему она необходима для современных приложений.

2. Концепции и работа SignalR: Поймем, как работают хабы, соединения, клиенты и серверы, а также механизмы протоколов WebSocket и Long Polling.

3. Создание интерактивного чата: Построим структуру простого чата. Напишем код для отправки и получения сообщений в реальном времени. Обработаем события, такие как подключение/отключение пользователей и оповещения о новых сообщениях.

Кому будет полезно:

1️⃣ .NET разработчикам: Расширьте свои навыки работы с ASP NET Core и создавайте интерактивные приложения.

2️⃣ Веб-разработчикам: Узнайте, как создавать быстро реагирующие и интерактивные веб-приложения.

🔥Не упустите шанс! Зарегистрируйтесь сейчас и станьте мастером создания интерактивных веб-приложений с SignalR!

Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.

C#-о-мания | Unity | СИ | Юнити

13 Nov, 16:00


.NET 9 вышел в релиз, и значит, можно начинать переносить свои проекты на новую версию. В этой статье рассматриваются новые улучшения и фишки .NET: C# 13, производительность, BuildCheck, GC, LINQ, NuGet Audit и прочее.
Статья
#dotnet #net9

C#-о-мания | Unity | СИ | Юнити

16 Oct, 10:01


🖥 Три кита ООП: что это такое?

Три кита объектного ориентирования - это наследование, инкапсуляция и полиморфизм. Возьмём следующий класс:
class Кот : Позвоночное, IКогтистый, IШерстяной, IХищник, IМурлыкает, IПрячетКогти
{
// Our code
}

Тогда полиморфизм:
Кот одновременно и позвоночное, и IКогтистый, и IШерстяной, и IХищник, и IМурлыкает, и IПрячетКогти.

Наследование:
Кот наследует от позвоночного позвоночник и добавляет к нему свои причиндалы (когти, шерсть, хищничество, мурчание).

Инкапсуляция:
У кота есть когти, а когти - объект. Они находятся внутри него, принадлежат ему, т.е. инкапсулированы.

#Полезно

C#-о-мания | Unity | СИ | Юнити

30 Jun, 10:00


База по базам данных. Для всех интересующихся
• Что такое база данных
• Реляционные и нереляционные базы данных
• SQL
• Транзакций
• ACID
• Уровни изоляций
• Индексы
• NoSql
Читаем здесь: статья

C#-о-мания | Unity | СИ | Юнити

27 Jun, 08:47


#минуткаюмора
(с)

C#-о-мания | Unity | СИ | Юнити

24 Jun, 13:14


#минуткаюмора

C#-о-мания | Unity | СИ | Юнити

23 Jun, 13:01


📘 Mastering C# : A Beginner’s Guide to C# Programming in 24hrs [2023]

Автор
: Czar.eth
Год: 2023

Читатели узнают о передовых методах разработки программного обеспечения, о том, как эффективно работать в команде и как подготовиться к карьере в технологической отрасли.

Читаем — здесь

C#-о-мания

C#-о-мания | Unity | СИ | Юнити

23 Jun, 06:01


✔️ Неявный доступ к индексу

Неявный оператор ^индекса "from end" теперь допускается в выражении инициализатора объектов. Например, теперь можно инициализировать массив в инициализаторе объектов, как показано в следующем коде:

var v = new S()
{
buffer =
{
[^1] = 0,
[^2] = 1,
[^3] = 2,
[^4] = 3,
[^5] = 4,
[^6] = 5,
[^7] = 6,
[^8] = 7,
[^9] = 8,
[^10] = 9
}
};


В версиях до C# 13 ^ оператор не может использоваться в инициализаторе объектов. Необходимо индексировать элементы с передней части.

C#-о-мания

C#-о-мания | Unity | СИ | Юнити

22 Jun, 13:04


📘 C# Cookbook: Modern Recipes for Professional Developers [2021]

Автор: Joe Mayo
Год: 2021

Эта книга содержит множество рецептов, которые помогут вам решать проблемы программирования на C#, с которыми вы, вероятно, столкнетесь. Вы изучите проверенные методы, которые помогут добиться большей производительности и улучшить качество кода.

Читаем — здесь

C#-о-мания

C#-о-мания | Unity | СИ | Юнити

22 Jun, 06:03


👀 Интерфейсы как ограничения обобщений

Интерфейсы могут выступать в качестве ограничений обобщений. При этом если в качестве ограничения можно указаь только один класс, то интерфейсов можно указать несколько.

Допустим, у нас есть следующие интерфейсы и класс, который их реализует:

interface IMessage
{
string Text { get; } // текст сообщения
}
interface IPrintable
{
void Print();
}
class Message : IMessage, IPrintable
{
public string Text { get; }
public Message(string text) => Text = text;

public void Print() => Console.WriteLine(Text);
}


Интерфейс IMessage представляет интерфейс сообщения и определяет свойство Text для хранения текста сообщения. Интерфейс IPrintable определяет метод Print для условной печати сообщения. И непосредственно класс сообщения - класс Message реализует эти интерфейсы.

Используем выше перечисленные интерфейсы в качестве ограничений обобщенного класса:

class Messenger<T> where T: IMessage, IPrintable
{
public void Send(T message)
{
Console.WriteLine("Отправка сообщения:");
message.Print();
}
}


В данном случае класс условного мессенджера использует параметр T — тип, который который реализует сразу два интерфейса IMessage и IPrintable.

C#-о-мания

C#-о-мания | Unity | СИ | Юнити

21 Jun, 13:05


👀 Поддержка карт API и пакетов для .NET Upgrade Assistant

.NET Upgrade Assistant теперь поддерживает карты API и пакетов от сторонних разработчиков. Теперь проще заменить библиотеки.

Подробнее — здесь

C#-о-мания

C#-о-мания | Unity | СИ | Юнити

21 Jun, 06:03


✔️ Гуманитарий с 0 знаний в программировании

Четвертая часть статьи о пути становления шарписта в геймдеве. Все ссылки на предыдущие части есть.

Подробнее — здесь

C#-о-мания

C#-о-мания | Unity | СИ | Юнити

20 Jun, 13:05


👀 Наследование интерфейсов

Интерфейсы, как и классы, могут наследоваться:

interface IAction
{
void Move();
}
interface IRunAction : IAction
{
void Run();
}
class BaseAction : IRunAction
{
public void Move()
{
Console.WriteLine("Move");
}
public void Run()
{
Console.WriteLine("Run");
}
}


При применении этого интерфейса класс BaseAction должен будет реализовать как методы и свойства интерфейса IRunAction, так и методы и свойства базового интерфейса IAction, если эти методы и свойства не имеют реализации по умолчанию.

Однако в отличие от классов мы не можем применять к интерфейсам модификатор sealed, чтобы запретить наследование интерфейсов.

Также мы не можем применять к интерфейсам модификатор abstract, поскольку интерфейс фактически итак, как правило, предоставляет абстрактный функционал, который должен быть реализован в классе или структуре (за исключением методов и свойств с реализацией по умолчанию).

C#-о-мания

C#-о-мания | Unity | СИ | Юнити

20 Jun, 06:03


📘 C# Game Programming Cookbook for Unity 3D [2021]

Автор:
Jeff W. Murray
Год: 2021

Большинство сценариев работают в рамках игровой платформы или в ваших собственных структурах. Методы и концепции, описанные в книге, заложат прочную основу для разработки игр.

Читаем — здесь

C#-о-мания

C#-о-мания | Unity | СИ | Юнити

19 Jun, 13:07


👀 Явная реализация интерфейсов

При явной реализации указывается название метода или свойства вместе с названием интерфейса. При этом при реализации мы не можем использовать какие-либо модификаторы:

interface IAction
{
void Move();
}
class BaseAction : IAction
{
void IAction.Move() => Console.WriteLine("Move in Base Class");
}


Следует учитывать, что при явной реализации интерфейса его методы и свойства не являются частью интерфейса класса. Поэтому напрямую через объект класса мы к ним обратиться не сможем:

BaseAction baseAction1 = new BaseAction();

// baseAction1.Move(); // ! Ошибка - в BaseAction нет метода Move
// необходимо приведение к типу IAction
// небезопасное приведение
((IAction)baseAction1).Move();
// безопасное приведение
if (baseAction1 is IAction action) action.Move();
// или так
IAction baseAction2 = new BaseAction();
baseAction2.Move();


В какой ситуации может действительно понадобиться явная реализация интерфейса? Например, когда класс применяет несколько интерфейсов, но они имеют один и тот же метод с одним и тем же возвращаемым результатом и одним и тем же набором параметров:

class Person : ISchool, IUniversity
{
public void Study() => Console.WriteLine("Учеба в школе или в университете");
}
interface ISchool
{
void Study();
}
interface IUniversity
{
void Study();
}


Класс Person определяет один метод Study(), создавая одну общую реализацию для обоих примененных интерфейсов. И вне зависимости от того, будем ли мы рассматривать объект Person как объект типа ISchool или IUniversity, результат метода будет один и тот же.

C#-о-мания

C#-о-мания | Unity | СИ | Юнити

19 Jun, 06:03


✔️ Отсутствие в .NET важных тригонометрических функций: заполняем пробелы

Актуальный материал для разработчиков, которые работают с компьютерной графикой, обработкой вычислений и обработкой сигналов.

Читаем — здесь

C#-о-мания

C#-о-мания | Unity | СИ | Юнити

18 Jun, 13:04


📘 C# Notes for Professionals. 700+ pages of professional hints and tricks [2018]

Автор: GoalKicker
Год: 2018

Здесь вы найдете 25 сценариев поиска и устранения неисправностей, связанных с памятью. Также в книге даны рекомендации по написанию когда, позволяющие избежать типичных ошибок.

Читаем — здесь

C#-о-мания

C#-о-мания | Unity | СИ | Юнити

18 Jun, 06:04


👀 Реализация по умолчанию

Начиная с версии C# 8.0 интерфейсы поддерживают реализацию методов и свойств по умолчанию. Это значит, что мы можем определить в интерфейсах полноценные методы и свойства, которые имеют реализацию как в обычных классах и структурах. Например, определим реализацию метода Move по умолчанию:

interface IMovable
{
// реализация метода по умолчанию
void Move()
{
Console.WriteLine("Walking");
}
}


С реализацией свойств по умолчанию в интерфейсах дело обстоит несколько сложнее, поскольку мы не можем определять в интерфейсах нестатические переменные, соответственно в свойствах интерфейса мы не можем манипулировать состоянием объекта. Тем не менее реализацию по умолчанию для свойств мы тоже можем определять:

interface IMovable
{
// реализация метода по умолчанию
void Move() => Console.WriteLine("Walking");
// реализация свойства по умолчанию
// свойство только для чтения
int MaxSpeed { get { return 0; } }
}


Стоит отметить, что если интерфейс имеет приватные методы и свойства (то есть с модификатором private), то они должны иметь реализацию по умолчанию.

C#-о-мания

C#-о-мания | Unity | СИ | Юнити

17 Jun, 13:05


✔️ Создание классов исключений

Если нас не устраивают встроенные типы исключений, то мы можем создать свои типы. Базовым классом для всех исключений является класс Exception, соответственно для создания своих типов мы можем унаследовать данный класс.

Допустим, у нас в программе будет ограничение по возрасту:

try
{
Person person = new Person { Name = "Tom", Age = 17 };
}
catch (Exception ex)
{
Console.WriteLine($"Ошибка: {ex.Message}");
}

class Person
{
private int age;
public string Name { get; set; } = "";
public int Age
{
get => age;
set
{
if (value < 18)
throw new Exception("Лицам до 18 регистрация запрещена");
else
age = value;
}
}
}


В классе Person при установке возраста происходит проверка, и если возраст меньше 18, то выбрасывается исключение. Класс Exception принимает в конструкторе в качестве параметра строку, которое затем передается в его свойство Message.

Но иногда удобнее использовать свои классы исключений. Например, в какой-то ситуации мы хотим обработать определенным образом только те исключения, которые относятся к классу Person. Для этих целей мы можем сделать специальный класс PersonException:

class PersonException : Exception
{
public PersonException(string message)
: base(message) { }
}


C#-о-мания