[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Учим C#: №10
TwitДата: Воскресенье, 17.03.2013, 12:43 | Сообщение # 1
Нет аватара
Приятно Царь

Сообщений: 42
Награды: 7


« -5 »

Оффлайн
Атрибуты. Красивое слово, не так ли? Что такое атрибуты в 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, покрутим баннеры... Просто покажу, как это можно делать на С#.




Кризис.Разные мнения.Идеи.

Первое правило шахмат - хочешь быть умнее? Играй с более умным соперником.
  • Страница 1 из 1
  • 1
Поиск: