Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Анализ атрибутов во время выполнения программы

Типы данных со значением null | Конструкторы и деструкторы | Частично определяемые классы и их назначение | Механизм вызова событий | Создание пользовательских обобщенных коллекций | Создание обобщенных интерфейсов | Установка ограничений на параметры обобщенных классов | Обобщенные делегаты | Несколько слов о вложенных делегатах | И напоследок... блок finally |


Читайте также:
  1. A) проанализируйте модели образования слов, прочтите и переведите слова и словосочетания, созданные на их основе.
  2. But for если бы не But for your help we should not have funushed in time. — Без вашей помощи мы не закончили бы вовремя. !!!
  3. Cост. Полянская И. (гиперссылки для выполнения индивидуальных проектов) Тема 1
  4. D. гарантия того, что любая установленная поломка будет исправлена в кротчайшее время
  5. He забывайте употреблять настоящее время вместо будущего в придаточных предложениях времени и условия после союзов if, when, as soon as, before, after, till (until).
  6. I. АНАЛИЗ ПСИХИЧЕСКИХ И ПСИХОФИЗИЧЕСКИХ КАЧЕСТВ
  7. I. Настоящее совершенное время (The Present Perfect Tense)

 

An attribute instance is an instance that represents an attribute at run-time. An attribute is defined with an attribute class, positional arguments, and named arguments. An attribute instance is an instance of the attribute class that is initialized with the positional and named arguments.

 

Retrieval of an attribute instance involves both compile-time and run-time processing.

 

The compilation of an attribute with attribute class T, positional-argument-list P and named-argument-list N, consists of the following steps:

 

13. Follow the compile-time processing steps for compiling an object-creation-expression of the form new T(P). These steps either result in a compile-time error, or determine an instance constructor C on T that can be invoked at run-time.

14. If C does not have public accessibility, then a compile-time error occurs.

15. For each named-argument Arg in N:

· Let Name be the identifier of the named-argument Arg.

· Name must identify a non-static read-write public field or property on T. If T has no such field or property, then a compile-time error occurs.

16. Keep the following information for run-time instantiation of the attribute: the attribute class T, the instance constructor C on T, the positional-argument-list P and the named-argument-list N.

17. Compilation of an attribute yields an attribute class T, an instance constructor C on T, a positional-argument-list P, and a named-argument-list N. Given this information, an attribute instance can be retrieved at run-time using the following steps:

18. Follow the run-time processing steps for executing an object-creation-expression of the form new T(P), using the instance constructor C as determined at compile-time. These steps either result in an exception, or produce an instance O of T.

 

19. For each named-argument Arg in N, in order:

· Let Name be the identifier of the named-argument Arg. If Name does not identify a non-static public read-write field or property on O, then an exception is thrown.

· Let Value be the result of evaluating the attribute-argument-expression of Arg.

· If Name identifies a field on O, then set this field to Value.

· Otherwise, Name identifies a property on O. Set this property to Value.

· The result is O, an instance of the attribute class T that has been initialized with the positional-argument-list P and the named-argument-list N.

 

Indexers are implemented in.NET using indexed properties, and have a name in the.NET metadata. If no IndexerName attribute is present for an indexer, then the name Item is used by default. The IndexerName attribute enables a developer to override this default and specify a different name.

 

namespace System.Runtime.CompilerServices.CSharp
{
[AttributeUsage(AttributeTargets.Property)]
public class IndexerNameAttribute: Attribute
{
public IndexerNameAttribute(string indexerName) {...}

public string Value { get {...} }
}
}

Понятие рефлексии (reflection) в языке C#

 

The following example shows how attribute information for a given program entity can be retrieved at run-time using reflection.

 

using System;
using System.Reflection;

class Test
{
static void ShowHelp(MemberInfo member)

{
HelpAttribute a = Attribute.GetCustomAttribute(member,
typeof(HelpAttribute)) as HelpAttribute;
if (a == null) {
Console.WriteLine("No help for {0}", member);
}
else {
Console.WriteLine("Help for {0}:", member);
Console.WriteLine(" Url={0}, Topic={1}", a.Url, a.Topic);
}
}

 

static void Main() {
ShowHelp(typeof(Widget));
ShowHelp(typeof(Widget).GetMethod("Display"));
}
}

When a particular attribute is requested through reflection, the constructor for the attribute class is invoked with the information provided in the program source, and the resulting attribute instance is returned. If additional information was provided through properties, those properties are set to the given values before the attribute instance is returned.

Что такое метаданные и зачем они нужны?

Для того чтобы различные части программ могли взаимодействовать друг с другом, им необходимо обмениваться информацией о предоставляемых ими возможностях, и о том, каким образом эти возможности использовать. Например, если программа использует статическую библиотеку, к библиотеке обычно прилагается заголовочный файл, описывающий экспортируемые данные, процедуры и структуру типов. Другой пример – DLL. Чтобы использовать её в своей программе, вы, скорее всего, будете использовать соответствующие заголовочный файл и библиотеку импорта. Ещё один пример – COM-компонент. Описание его интерфейса обычно хранится в idl-файле или в виде специальных данных, в виде библиотеки типов. Все эти дополнительные файлы и данные, описывающие программные компоненты, называют метаданными.

Приставка мета подчеркивает что это – данные, описывающие другие данные. "Данные о данных".

В различных технологиях программирования используются метаданные разной степени подробности и разной степени универсальности. Но в технологии.Net метаданные играют совершенно особую роль. Это роль "универсального клея", на который возложены функции поставщика информации о типах как во время компиляции программы, так и во время её исполнения. Эта важная роль метaданных обусловлена следующими факторами:


Дата добавления: 2015-11-16; просмотров: 108 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Создание пользовательских атрибутов| Получение экземпляра класса Type

mybiblioteka.su - 2015-2024 год. (0.006 сек.)