Как реализовать INamingContainer, расскажите мне что-нибудь глубже
Если я хочу реализовать пользовательский контейнерный элемент управления, я должен сохранить свой элемент управления, наследуемый от INamingContainer. Это интерфейс был определен как интерфейс маркера. Как я знаю, это сделает CLR, создающий оператор управления, в виде метаданных, подобного атрибуту.
Итак, я хочу знать:
Система фреймворка.net только создала метаданные для своего интерфейса маркера? Могу ли я создать интерфейс маркера?
Что произойдет, когда компилятор CLR компилирует элемент управления, наследуемый от INamingContainer?
Какова функция INamingContainer для управления контейнером?
заранее спасибо!
1 ответ
Любой элемент управления, реализующий этот интерфейс, создает новое пространство имен, в котором все атрибуты идентификатора дочернего элемента управления гарантированно будут уникальными.
Идентификаторы устанавливаются механизмом asp.net, который определяет, есть ли у элемента управления этот атрибут, когда он строит иерархию элементов управления. Когда он встречает дочерний элемент управления с этим атрибутом, он меняет способ создания идентификаторов для дочерних элементов этого дочернего элемента управления, чтобы они все были уникальными.
Интерфейс называется "маркер", потому что он не имеет методов / свойств. Он действительно используется в качестве маркера в вашем классе движком asp.net.
Пример метода, который получает все классы, реализующие определенный атрибут (по этой ссылке)
static IEnumerable<Type> GetTypesWithHelpAttribute(Assembly assembly) {
foreach(Type type in assembly.GetTypes()) {
if (type.GetCustomAttributes(typeof(HelpAttribute), true).Length > 0) {
yield return type;
}
}
}