Четверг, 12.12.2024, 01:53

  Сайт проекта StreamLive 3.147.48.251

Вы вошли как Гость | Группа "Гости" | RSS

Меню

Категории
С# [55]
VB.net [0]
VB6 [1]

Реклама

Nothing

 
Главная » Статьи » Программирование » С# [ Добавить статью ]
Пример пользовательского атрибута.
Вот пример определения и использования пользовательского атрибута:
using System;
namespace test
{
//Объявление атрибута.
[AttributeUsage(AttributeTargets.All, Inherited = false, AllowMultiple = true)]
class TestAttribute: System.Attribute
{
//Поле атрибута.
private string name;
//Конструктор атрибута.
public TestAttribute(string name)
{
this.name = name;
}
//Свойство только для чтения.
public virtual string Name
{
get
{
return name;
}
}
}
//Конец объявления атрибута.
//Применение атрибута к классу.
[TestAttribute("Igor Alexeev")]
class Test
{
static void Main()
{
GetAttribute(typeof(Test));
}
public static void GetAttribute(Type t)
{
TestAttribute att=
(TestAttribute) Attribute.GetCustomAttribute(t, typeof(TestAttribute));
Console.WriteLine("{0}", att.Name);
}
}
}

Как видно, атрибут TestAttribute является потомком класса System.Attribute (как всегда). Перед определением нового атрибута мы видим строку
...
[AttributeUsage(AttributeTargets.All, Inherited = false, AllowMultiple = true)]
...

Этой строкой определяется область применения нашего атрибута - первый параметр (AttributeTargets.All) говорит о том, что мы сможем применять наш атрибут TestAttribute к чему угодно, второй (Inherited=false) - что атрибут не будет наследоваться (т. е. если мы применим атрибут TestAttribute к некоторому классу, то у потомков этого класса атрибута TestAttribute не будет), третий (AllowMultiple = true) - что атрибут к каждому элементу может пременяться только один раз (заметим в скобках, что для определения области применения нашего пользовательского атрибута мы используем другой атрибут - AttributeUsage).

Далее мы определяем для нашего атрибута внутреннюю переменную name типа string и конструктор с параметром типа string. В конструкторе мы записываем значение в переменную name. Еще чуть ниже мы пишем в классе атрибута свойство только для чтения:
...
public virtual string Name
{
get
{
return name;
}
}
...

После создания класса атрибута мы применяем его к другому классу Test. Для этого мы должны создать экземпляр атрибута TestAttribute непосредственно перед классом Test:
...
[TestAttribute("Igor Alexeev")]
class Test
{
...

Делаем мы это в квадратных скобках. При этом у нас вызывается конструктор с параметром атрибута.

В классе Test мы в методе GetAttribute просто выводим на консоль значение свойства name атрибута. Для этого мы воспользовались статическим методом GetCustomAttribute класса Attribute. Этот метод принимает в качестве параметров тип, к которому атрибут применяется (т. е. класс Test в нашем случае) и собственно атрибут, который мы применяем (у нас это TestAttribute). Возвращает же он экземпляр атрибута, который мы и используем для получения значения свойства name.

Метод GetAttribute мы вызываем в констукторе класса Test.

Результатом выполнения нашей программы будет вывод на консоль слов "Igor Alexeev".


Источник:
Категория: С# | Добавил: Sumrak (14.11.2010) | Автор: E W
Просмотров: 1018 | Комментарии: 0 | Теги: | Рейтинг: 0.0/0
Всего комментариев: 0

Log in

Block title

Copyright sumrak © 2024