2013-08-23 5 views
0

Если я хочу реализовать пользовательский элемент управления контейнером, я должен сохранить свой контроль, наследующий от INamingContainer. Это интерфейс был определен как интерфейс-маркер. Как я знаю, это создаст CLR-создание управляющий оператор в метаданные, такие как атрибут.Как реализовать INamingContainer, скажите мне что-то более глубокое

Итак, я хочу знать:

  1. ли структура система .net лишь создала метаданные для самого по интерфейсу маркеров? Могу ли я создать интерфейс маркера?

  2. Что произойдет, если компилятор CLR компилирует элемент управления, наследуемый от INamingContainer?

  3. Какова функция INamingContainer для управления контейнером?

спасибо заранее!

+0

Возможно, это помогает: http://stackoverflow.com/questions/2532355/when-do-i-really- потребность-INamingContainer-интерфейс – oddparity

ответ

0

Любой элемент управления, который реализует этот интерфейс создает новое пространство имен, в котором все атрибуты дочернего элемента управления ID гарантированно быть уникальным.

Идентификаторы устанавливаются механизмом asp.net, который определяет, имеет ли элемент управления этот атрибут при построении иерархии элементов управления. Когда он сталкивается с дочерним элементом управления с этим атрибутом, он меняет способ создания идентификаторов для дочерних элементов этого дочернего элемента управления, поэтому они уникальны.

Интерфейс называется «маркер», поскольку он не имеет методов/свойств. Он действительно используется как маркер вашего класса движком asp.net.

Exemple метода, который получают все классы, реализующие определенный атрибут (от this link)

static IEnumerable<Type> GetTypesWithHelpAttribute(Assembly assembly) { 
    foreach(Type type in assembly.GetTypes()) { 
     if (type.GetCustomAttributes(typeof(HelpAttribute), true).Length > 0) { 
      yield return type; 
     } 
    } 
} 
Смежные вопросы