Аттрибуты
Что такое атрибут.
Все существующие компиляторы сохраняют
в исполняемом файле некоторую информацию об исходном коде. Эта
информация жестко определяется создателями компилятора и не может
быть расширена пользователем. Так было до настоящего момента. Но
с выходом Microsoft.NET это стало возможным благодаря
атрибутам (attributes). Хотя атрибуты и не являются частью
какого либо конкретного языка, их может поддерживать любой язык
входящий в Microsoft.NET, в данный момент они присутствуют только
в C#. Атрибуты позволяют вам добавлять любую дополнительную
текстовую информацию о ваших классах, методах, полях, свойствах и т.д.
Атрибуты сохраняются вместе с метаданными (metadata) и могут
быть достаточно просто получены во время выполнения программы при
помощи процесса называемого reflection. Атрибуты могут быть
полезны как программистам так и создателям средств разработки, таких
как UML средства, ClassBrowser'ы и т.д. В C# достаточно много
предопределенных атрибутов и большинство программистов скорее будут
использовать стандартные атрибуты, чем вводить новые.
К примеру в C# вы можете использовать
атрибут DllImport чтобы указать, что метод класса импортируется
из Dll.
using System.Runtime.InteropServices;
public class AppMain {
[DllImport("user32.dll")]
public static extern int MessageBoxA(int handle,string message,string caption,int flags);
public static void Main(){
MessageBoxA(0,"Hello World","Native Message Box",0);
}
}
|
Создание и использование собственных атрибутов.
В качестве примера создадим свой атрибут
MethodComments, позволяющий добавлять некоторые комментарии к
методам нашего класса. Как вы уже наверно заметили добавление атрибута
к члену класса очень похоже на создание экземпляра некоего класса.
Так оно и есть. Чтобы создать свой атрибут необходимо написать класс
наследник класса System.Attribute. Microsoft рекомендует добавлять слово
Attribute к названию класса атрибут задающего. Хотя это и не обязательно,
но позволяет отличить такие классы от всех остальных. При добавлении атрибута
к коду вы можете опустить слово Attribute и компилятор добавит его
автоматически. Вот код создающий MethodComments.
using System;
[AttributeUsage(AttributeTargets.Method)]
public class MethodCommentsAttribute : System.Attribute {
private string comments;
public string Comments {
get {
return comments;
}
set {
comments = value;
}
}
public MethodCommentsAttribute(string acomments) {
comments = acomments;
}
public override string ToString() {
return comments;
}
}
|
Некоторые комментарии к коду.
При создании атрибута в C# вам понадобится предопределенный атрибут
- AttributeUsage. Он задает элементы кода к которым применим атрибут (в данном
случае методы),а также некоторые свойства атрибута. Например, может ли быть
атрибут примененным несколько раз к одному элементу. Метод ToString() был
переопределен для простоты распечатки данного атрибута.
Теперь, после того как атрибут создан, покажем как узнать его значение
во время выполнения программы. Это делается при помощи технологии называемой
reflection.
using System;
using System.Reflection;
public class SampleClass {
[MethodComments("Some method that returns a void")]
public void SomeVoidMethod() { }
[MethodComments("Some method that returns an int")]
public int SomeIntMethod() {
return 0;
}
}
public class AppMain {
public static void Main() {
Type comments = typeof(MethodCommentsAttribute);
MethodInfo[] methods = typeof(SampleClass).GetMethods();
object[] attributes;
Console.WriteLine("Method Info for SampleClass");
foreach(MethodInfo method in methods) {
Console.WriteLine("Method Name: {0}",method.Name);
if (method.IsDefined(comments)) {
attributes = method.GetCustomAttributes(comments);
foreach(object obj in attributes)
Console.WriteLine("Method comments : {0}",obj);
}
else {
Console.WriteLine("Method comments are unavailable.");
}
}
}
}
|
Лицензионное соглашение
- © 2000-2012 dotSITE
Хостинг .NET предоставлен
PARKING.RU
Поддержку сайта осуществляет Murano Software Inc., Offshore software development