[ Полезный рекламный блок ]
Попробуйте свои силы в игре, где ваши навыки программирования на C# станут решающим фактором. Переходите по ссылке 🔰.
C# атрибути – це метадані, які можна приєднувати до типів, членів класів, методів, властивостей та інших елементів програми.
Атрибути надають додаткову інформацію про програму, яка може бути використана під час компіляції або виконання. Атрибути відіграють важливу роль в аспектах таких як серіалізація, налагодження, впровадження коду та інші. Атрибути визначені як класи, що успадковуються від System.Attribute.
Вступ
Атрибути – це метадані, які можуть бути приєднані до типів, членів класів, методів, властивостей та інших елементів програми. Вони надають додаткову інформацію про програму, яка може використовуватися під час компіляції, виконання або аналізу коду.
Метадані – це інформація про код, яка описує його структуру, характеристики та властивості. Метадані допомагають розуміти й аналізувати код на більш високому рівні абстракції. Ці дані можуть містити інформацію про типи даних, методи, властивості, атрибути, успадкування та багато іншого. Метадані можуть використовуватися як під час компіляції, так і під час виконання, щоб забезпечити більш гнучку поведінку програми.
Приклади вбудованих атрибутів
ObsoleteAttribute: Позначає елемент як застарілий. Це дозволяє розробникам бачити, що певного коду слід уникати на користь нових альтернатив.
1 2 |
[Obsolete("This method is deprecated. Use NewMethod() instead.")] void OldMethod() { /* ... */ } |
SerializableAttribute: Позначає клас як такий, що серіалізується, тобто екземпляри цього класу можуть бути перетворені на потік байтів для збереження і передачі.
1 2 |
[Serializable] class SerializableClass { /* ... */ } |
ConditionalAttribute: Керує умовною компіляцією методів. Методи, позначені цим атрибутом, будуть включені в збірку тільки за певних умов.
1 2 |
[Conditional("DEBUG")] void DebugMethod() { /* ... */ } |
DllImportAttribute: Використовується для вказівки імпорту функції з бібліотеки DLL у код C#. Це дає змогу взаємодіяти з кодом, написаним іншими мовами, як-от C або C++.
1 2 |
[DllImport("user32.dll")] public static extern int MessageBox(IntPtr hWnd, string text, string caption, int options); |
CustomAttribute:Це атрибут, який ви можете створити самі, щоб передати додаткові дані або метадані у вашому коді. Прикладом може бути створення атрибута для визначення метаданих, пов’язаних з авторством, версією тощо.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true)] public class CustomInfoAttribute : Attribute { public string Author { get; set; } public string Version { get; set; } public CustomInfoAttribute(string author, string version) { Author = author; Version = version; } } [CustomInfo("John Doe", "1.0")] class MyCustomClass { /* ... */ } |
Створення власних атрибутів
Створення власних атрибутів у C# може бути корисним для додавання користувацьких метаданих і логіки у ваш код. Як приклад, давайте створимо атрибут для валідації моделі користувача. Цей атрибут перевірятиме, чи відповідає користувацький об’єкт певним правилам.
Спочатку створимо клас User, для якого будемо виконувати валідацію даних:
1 2 3 4 5 |
public class User { public string Name { get; set; } public int Age { get; set; } } |
Тепер створимо клас атрибута для валідації:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
[AttributeUsage(AttributeTargets.Class)] public class ValidateUserAttribute : Attribute { public void Validate(object obj) { if (obj is User user) { if (string.IsNullOrEmpty(user.Name)) throw new ValidationException("Name cannot be empty."); if (user.Age <= 0) throw new ValidationException("Age must be a positive value."); } else { throw new ValidationException("Invalid object type."); } } } |
Тепер застосуємо створений атрибут до класу User, який буде перевірятися при виклику методу Validate:
1 2 3 4 5 6 |
[ValidateUser] public class User { public string Name { get; set; } public int Age { get; set; } } |
У класі Program створимо метод, який виконуватиме валідацію з використанням нашого атрибута:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
static bool ValidateUser(object obj) { var type = obj.GetType(); var attributes = type.GetCustomAttributes(typeof(ValidateUserAttribute), false); if (attributes.Length > 0) { var validateAttribute = attributes[0] as ValidateUserAttribute; try { validateAttribute.Validate(obj); } catch (Exception ex) { Console.WriteLine(ex.Message); return false; } return true; } else { return false; } } |
У методі Main, використовуємо цей метод:
1 2 3 4 5 6 7 8 9 10 11 12 |
static void Main() { var user = new User { Name = "John", Age = -1 }; if (ValidateUser(user)) { Console.WriteLine("Validation passed."); } else { Console.WriteLine("No validation attribute found."); } } |
У цьому прикладі ми створили атрибут ValidateUserAttribute, який застосовується до класу User. Метод ValidateUser перевіряє наявність цього атрибута і викликає метод Validate, який виконує перевірку на відповідність заданим правилам.
Я сподіваюся, що вам сподобалося читати цю статтю, і вона виявилася легкою для розуміння. Будь ласка, дайте мені знати, якщо у вас є якісь коментарі або виправлення.
Так само вам може бути цікава попередня стаття –
1 |
Що означає атрибут [Flags]https://dijix.com.ua/blog/uk/chto-oznachaet-atribut-flags-enum-c/ |
.
Ви хочете навчитися писати код мовою програмування C#?
Створювати різні інформаційні системи, що складаються з сайтів, мобільних клієнтів, десктопних додатків, телеграм-ботів тощо.
Переходьте до нас на сторінку Dijix і ознайомтеся з умовами навчання, ми спеціалізуємося тільки на індивідуальних заняттях, як для початківців, так і для просунутих програмістів. Ви можете взяти як одне заняття для опрацювання питання, що вас цікавить, так і кілька, для більш щільної роботи. Завдяки особистому кабінету, кожен студент підвищить якість свого навчання, у вашому розпорядженні:
- Доступ до пройденого матеріалу
- Тематичні статті
- Бібліотека книг
- Онлайн тестування
- Спілкування в закритих групах