louis vuitton bag moncler jacka ugg boots mbt sko louis vuitton oslo moncler ugg www.steklo1.ru
   Поиск
 

Изучаем C Sharp (C#)

Программирование на C Sharp (C#) с нуля

Cи Шарп это просто Simple C#
Логин Пароль Вход Регистрация
Главная
Изучаем C#
Web-приложения
Win-приложения
Web-сервисы
ADO.NET
FrameWork
Алгоритмы
Исходники
Классы
Среда разработки
Статьи
Форум
FAQ
О Проекте
Обратная связь
Отблагодарить
Rambler's Top100

Атрибуты

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

Все атрибуты (в отличие, скажем, от атрибутов языка IDL) являются классами (потомками класса System.Attribute). В отличие от атрибутов IDL набор атрибутов .NET открыт для дополнения, т. е. вы можете определять собственные атрибуты и применять их к вышеуказанным элементам вашего кода.

Атрибуты делятся на предопределенные (встроенные) и пользовательские (которые пишет программист).

Встроенные атрибуты могут использоваться, например, при сериализации (сохранении в поток) данных класса. Скажем, вам надо, чтобы у класса сохранялись не все данные - в этом случае вы можете пометить те данные, которые не надо сохранять, специальным атрибутом.

Еще пример применения атрибутов. Компоненты, которые вы располагаете на форме (кнопки, метки и т. п.) имеют некоторый набор свойств (шрифт, местоположение, видимость и т. п.). В IDE Visual Studio вы можете выбрать в окне Properties один из двух способов расположения этих свойств - по алфавиту или по категориям. Так вот, в какую категорию попадет то или иное свойство, определяется специальным встроенным атрибутом.

Атрибуты в C# заключаются в квадратные скобки.

пример определения и использования пользовательского атрибута:



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("NAME")]
    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("NAME")]
    class Test
    {



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

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

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

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

Предыдущая стр.    Оглавление    Следующая стр.
Средняя оценка: (1,33 - 3 голосов)
Для оценки необходимо зарегистрироваться


Только зарегистрировавшиеся пользователи могут оставлять комментарии

Комментирует StBernard 19.01.2012 13:25:28




Практический обучающий видео-курс "Основы C#"

От профессионального
разработчика для начинающих
и опытных программистов!

Кликните, чтобы изучить
язык C# с нуля и научиться
писать программы под платформу .NET!