Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥4🤝2
Please open Telegram to view this post
VIEW IN TELEGRAM
😁45👍6🔥3🤝1
Знакомы с рефлексией в шарпе?
И так, сегодня поговорим про рефлексию в C#. Она позволяет работать с типами и методами на этапе выполнения, но надо быть осторожным, если использовать её неправильно, можно не только замедлить программу, но и оставить уязвимости.
Давайте начнём с простого примера. Вот как можно вывести все методы класса string:
Это удобно, когда нужно проанализировать класс, но если таких операций много и без фильтрации, то они могут сильно нагрузить систему.
Теперь представьте ситуацию, когда имя класса передаётся в строке:
Такие штуки часто используют в плагинах или динамических системах, но тут важен контроль за входными данными, чтобы избежать ошибок или даже уязвимостей.
И, наконец, вызов метода через рефлексию:
🔥 Получается, рефлексия даёт нам возможность вызывать методы, чьи имена мы знаем только во время выполнения.
Звучит круто, но без правильной проверки это может обернуться проблемами.
➡️ C# Ready | #практика
И так, сегодня поговорим про рефлексию в C#. Она позволяет работать с типами и методами на этапе выполнения, но надо быть осторожным, если использовать её неправильно, можно не только замедлить программу, но и оставить уязвимости.
Давайте начнём с простого примера. Вот как можно вывести все методы класса string:
Type type = typeof(string);
var methods = type.GetMethods();
foreach (var method in methods)
Console.WriteLine(method.Name);
Это удобно, когда нужно проанализировать класс, но если таких операций много и без фильтрации, то они могут сильно нагрузить систему.
Теперь представьте ситуацию, когда имя класса передаётся в строке:
string className = "System.Text.StringBuilder";
Type type = Type.GetType(className);
var instance = Activator.CreateInstance(type);
// StringBuilder
Console.WriteLine(instance?.GetType().Name);
Такие штуки часто используют в плагинах или динамических системах, но тут важен контроль за входными данными, чтобы избежать ошибок или даже уязвимостей.
И, наконец, вызов метода через рефлексию:
Type type = typeof(Console);
var method = type.GetMethod("WriteLine", new[] { typeof(string) });
method?.Invoke(null, new object[] { "Привет, рефлексия!" });
🔥 Получается, рефлексия даёт нам возможность вызывать методы, чьи имена мы знаем только во время выполнения.
Звучит круто, но без правильной проверки это может обернуться проблемами.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥7🤝1
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥6
LINQ крайне прикольная штука, она позволяет решать сложные задачи обработки данных лаконично.
Сейчас расскажу про менее очевидные, но мощные возможности, которые помогут вам оптимизировать работу с коллекциями и данными:
1. Группировка с последующей фильтрацией — можно группировать элементы и сразу применять фильтры на основе условий:
var data = new[] { 1, 2, 3, 4, 5, 6 };
var result = data.GroupBy(x => x % 2)
.Where(g => g.Key == 1)
.SelectMany(g => g);
// Результат: [1, 3, 5]
2. Создание словарей с помощью ToDictionary — LINQ позволяет преобразовать коллекцию в словарь:
var items = new[] { "apple", "banana", "cherry" };
var dict = items.ToDictionary(x => x, x => x.Length);
// Результат: {"apple": 5, "banana": 6, "cherry": 6}
3. Выбор уникальных элементов через DistinctBy:
Сравнение объектов по конкретному ключу с использованием DistinctBy (доступно через
System.Linq
)var people = new[] {
new { Name = "Alice", Age = 30 },
new { Name = "Bob", Age = 25 },
new { Name = "Alice", Age = 35 }
};
var unique = people.DistinctBy(p =>
p.Name);
// Результат: Alice (30), Bob (25)
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥3🤝1
В этом посте мы создадим мини-игру "Отгадай слово". Этот проект демонстрирует основы работы со строками, коллекциями и логикой в C#
- Инициализация игры
- Обработка ввода
- Проверка и отображение результата
- Основной цикл
🔥 — если узнал новое
🤝 — если уже знал как создать
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16🤝7👍4😁2
This media is not supported in your browser
VIEW IN TELEGRAM
Достаточно много новичков в этом канале, поэтому вот сайт для начинающих в C# — Tutorials Teacher
Там собрано множество обучающих материалов, начиная с простого уровня, вы сможете обучаться, а также проходить тесты. Подмечу что в нужных местах присутствуют картинки, что помогает усвоить материал лучше.
📌 Ссылочка: tutorialsteacher.com
➡️ C# Ready | #ресурс
Там собрано множество обучающих материалов, начиная с простого уровня, вы сможете обучаться, а также проходить тесты. Подмечу что в нужных местах присутствуют картинки, что помогает усвоить материал лучше.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6👍4🤝2
•
Contains
— проверяет наличие конкретного элемента в списке, возвращая true, если элемент найден, и false, если нет.•
Exists
— проверяет, существует ли в списке элемент, соответствующий заданному условию (предикату), возвращая true при наличии такого элемента и false в противном случае.🔥 — если узнал новое
🤝 — если уже пользовался
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥22🤝8👍3
👍13👎1🔥1
Изучаем работу индексаторов
Индексаторы в C# позволяют обращаться к данным объекта, как если бы это были элементы массива.
Представим, что у нас есть класс
Индексатор позволит нам добавлять и получать контакты по имени. Например, если мы хотим установить номер телефона для Алисы, можно использовать индексатор, как для массива:
Теперь, чтобы использовать этот класс, создадим объект contactList и добавим несколько контактов с помощью индексатора. Например, добавим контакт для Алисы, указав ее номер телефона:
Чтобы получить номер телефона Алисы, можно просто использовать индексатор, указав имя контакта:
🔥 Таким образом, индексаторы позволяют нам обращаться к данным внутри объекта, как к элементам массива, обеспечивая компактность и удобство работы с коллекциями данных в C#
➡️ C# Ready | #практика
Индексаторы в C# позволяют обращаться к данным объекта, как если бы это были элементы массива.
Представим, что у нас есть класс
ContactList
, который хранит контакты в виде словаря. Индексатор позволит нам добавлять и получать контакты по имени. Например, если мы хотим установить номер телефона для Алисы, можно использовать индексатор, как для массива:
public class ContactList
{
private Dictionary<string, string> contacts = new Dictionary<string, string>();
// Индексатор для доступа к контактам
public string this[string name]
{
get => contacts.ContainsKey(name) ? contacts[name] : "Контакт не найден";
set => contacts[name] = value;
}
}
Теперь, чтобы использовать этот класс, создадим объект contactList и добавим несколько контактов с помощью индексатора. Например, добавим контакт для Алисы, указав ее номер телефона:
ContactList contactList = new ContactList();
contactList["Алиса"] = "+123456789"; // Устанавливаем контакт для Алисы
Чтобы получить номер телефона Алисы, можно просто использовать индексатор, указав имя контакта:
Console.WriteLine(contactList["Алиса"]); // Получаем номер Алисы
🔥 Таким образом, индексаторы позволяют нам обращаться к данным внутри объекта, как к элементам массива, обеспечивая компактность и удобство работы с коллекциями данных в C#
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8👍5