Twit | Дата: Воскресенье, 17.03.2013, 12:43 | Сообщение # 1 |
 Приятно Царь
| Атрибуты. Красивое слово, не так ли? Что такое атрибуты в C#? Они позволяют добавлять в код описательную информацию, которая может определять действия периода компиляции, периода выполнения, или даже ограничение/предоставление некоторых возможностей какого-либо члена в период выполнения. Атрибуты могут определять информацию, относящуюся к классу, структуре, методу и другим синтаксически-концептуальным элементам. Указываются перед элементом в квадратных скобках, вот таким образом:
using System.Runtime.InteropServices; .............. .............. [DllImport("user32.dll")] static extern int MessageBoxA(int hWnd,string msg,string caption,int type);
Так импортируются функции из динамических библиотек, хотя в некоторых книгах, это называется экспортированием. К чему бы это? Этот атрибут, по своей концепции, определяет действия периода выполнения. А сам он определен в пространстве имен System.Runtime.InteropServices. Можно использовать встроенные атрибуты C#, можно создавать новые. Любой атрибут – это класс, наследованный от класса System.Attribute. Теперь давайте создадим реальный конкретный атрибут, который будет определять, например, адрес URL:
using System; using Sc=System.Console;
public class URLAttribute:Attribute { public URLAttribute(string url) { this.URL=url; }
protected string uRL;
public string URL { get{return uRL;} set{uRL=value;} }
}
[URLAttribute("www.xakep.ru")] class HackerLink {
}
class Application { public static void Main() { Type type=typeof(HackerLink); foreach(Attribute attr in type.GetCustomAttributes(false)) { URLAttribute urlAttr=attr as URLAttribute; if(null!=urlAttr) { Sc.WriteLine("Target Link Is "+urlAttr.URL); } } Sc.ReadLine(); } }
Из чего же состоит сам атрибут? 1) Защищенная строковая переменная URL, хранящая сам адрес; 2) Свойство URL, управляющее и контактирующее со строковой переменной; 3) Конструктор, устанавливающий адрес, заданный в аргументе.
Далее мы прикрепили созданный атрибут к классу HackerLink, задали ссылку на наш любимый сайтец. Теперь давайте рассмотрим метод Main(). Здесь используется отражение (Reflection). Отражение позволяет динамически определять сведения и данные о типах в проге. В первой строке мы создаем объект типа Type, определяющий тип объекта, при этом используем оператор typeof, который в данном контексте присваивает переменной type значение HackerLink. После этого объект находится в нашем распоряжении. Далее просматриваем все атрибуты, и если какой-то из них удается привести к URLAttribute, то выводим на экран строку с линком. Че-то тут новенькое кажись... А! Оператор as... Так вот...
Оператор as производит попытку приведения типов данных. Попытка может быть как успешной, так и безуспешной. В этой проге продемонстрирована работа с атрибутами класса. Существуют и другие разновидности атрибутов. Рассмотрим основные встроенные атрибуты C#. Атрибут Obsolete служит для того, чтобы отметить фрагмент кода, например метод, как устаревший. Имеет один параметр – строка сообщения, которое выведется при компиляции. Атрибут Transactionable определяет способность метода участвовать в транзакциях. Атрибут Conditional служит для создания условных методов, т.е. методов которые выполняются только тогда, когда параметр атрибута является символьной константой, определенной директивой #define. Это довольно так и интересный атрибут, так что рассмотрим следующий листинг.
#define FINAL
using Sc=System.Console;
class Test { [Conditional (“TRIAL”)] public void Remind() { Sc.WriteLine(“Please don’t forget to register your version of ... ” ); Sc.ReadLine(); Sc.WriteLine(“Press Enter if u’re sure that u’ll not forget!!!”); Sc.ReadLine(); } [Conditional (“FINAL”)] public void Hello() { Sc.WriteLine(“Hi! Registered user!”); Sc.WriteLine(“Thank u very much for using this nice prog!”); Sc.ReadLine(); } }
Как все догадались, первый метод не будет работать, даже если к нему обратиться, а вот если обратится ко второму, то он даже нас поблагодарит еще. Этот прием вполне подходит для создания различия между шарой и зарегистрированной прогой, хотя само по себе это мало чем поможет. В следующей статье будет рассмотрена обработка исключительных ситуаций, а потом уже будем автоматизировать IE, покрутим баннеры... Просто покажу, как это можно делать на С#.
Кризис.Разные мнения.Идеи.
Первое правило шахмат - хочешь быть умнее? Играй с более умным соперником.
|
|
| |