ГЛАВНАЯ     АРХИВ     НАПИСАТЬ АДМИНУ     ПОДПИСАТЬСЯ НА RSS     ВОЙТИ      

Поиск

Категории

Облако тегов

  << Предыдущий пост       Следующий пост >>  
От: ironMan
16. августа 2011 04:11

Чтобы запросить тип или член о прикрепленных к ним атрибутах, нужно применить отражение (reflection).

В качестве последнего примера запроса членов как прикрепленных к ним атрибутов мы рассмотрим способ запроса полей класса. Допустим, наш класс содержит поля, значения которых нужно сохранить в реестре. Для этого можно определить атрибут с конструктором, принимающим как параметр enum с ульями реестра, и строку, представляющую имя параметра реестра. Затем можно выполнить запрос к полю как к разделу реестра:



using System;
using System.Reflection;

public enum RegistryHives
{
HKEYCLASSES_ROOT,
HKEYCURRENT_USER,
HKEYLOCAL_MACHINE,
HKEY_USERS,
HKEYCURRENT__CONFIG
}

public class RegistryKeyAttribute: Attribute
{
public RegistryKeyAttribute (RegistryHives Hive, String ValueName)
{
this.Hive = Hive;
this.ValueName = ValueName;
}

protected RegistryHives hive;
public RegistryHives Hive
{
get
{
return hive;
}
set
{
hive = value;
}
}

protected String valueName;
public String ValueName
{
get
{
return valueName;
}
set
{
valueName = vslue;
}
}
}

class ТеstClass
{
[RegistryKey(RegistryHives.HKEYCURRENT_U5ER, "Foo")
public int Foo;
public int Bar;
}

class FieldAttrApp
{
public static void Main()
{
Type type = Type.GetType("TestClass");
foreach(Fieldlnfo field in type.GetFields())
{
foreach (Attribute attr in field.GetCustomAttributes(true))
{
RegistryKeyAttribute registryKeyAttr = attr as RegistryKeyAttribute;
if( null != registryKeyAttr )
{
Console.WriteLine("{0} будет сохранен в {1}\\\\{2}",
field.Name, registryKeyAttr.Hive, registryKeyAttr.VaiueName
);
}
}
}
}
}



Результат работы программы:

Foo будет сохранен в HKEYCURRENT_USER\\Foo

Этот пример в чем-то дублирует предыдущий. Однако пара деталей все же важна для нас. Как и объект Methodlnfo, определенный для получения информации о методе из объекта типа, объект Fieldlnfo предоставляет аналогичную функциональность для получения из объекта сведений о поле. Как и в предыдущем примере, мы начнем с получения объекта типа, ассоциированного с нашим тестовым классом. Затем мы циклически обработаем массив Fieldlnfo, а также все атрибуты каждого объекта Fieldlnfo, пока не найдем нужный — RegistryKeyAttribute. Если мы его обнаружим, то выведем имя поля и значения полей атрибута Hive и ValueName.


Постовой: Интернет магазин ламп

Похожие записи


Вопросы на собеседовании C#, Net, ASP.NET, SQL
Продолжая тему вопросов на собеседовании. Нашел еще одну подборку. Оригинал лежит здесь . Перенес, чтобы не затерялось. Есть вполне вменяемые ответы (хотя, на некоторые вопросы ответил бы по-другому). Ответы находятся после списка вопросов, я их не менял. 23. Что такое шаблон проектирования Model/View/Controller? Как и зачем его применяют? 2...

Запрос информации об атрибутах класса в C#
Чтобы запросить тип или член о прикрепленных к ним атрибутах, нужно применить отражение (reflection).Способ получения атрибута зависит от типа члена, к которому производится запрос. Допустим, вам нужно узнать атрибут, определяющий удаленный сервер, на котором должен быть создан объект. Без атрибутов вам бы пришлось сохранять эту информацию в константе или файле ресурс...

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

Добавить комментарий




biuquote
  • Комментарий
  • Предпросмотр
Loading


  Сохранить комментарий