如何实现INamingContainer,告诉我更深层次的东西

时间:2013-08-23 09:54:42

标签: c# marker-interfaces

如果我想实现自定义容器控件,我必须保持我的控件继承自INamingContainer,这是一个接口被定义为标记接口。据我所知,这将使CLR创建控制语句为元数据,如属性。

所以,我想知道:

  1. .net框架系统是否只为自己的标记界面创建了元数据? 我可以创建标记界面吗?

  2. CLR编译器编译控件时会发生什么情况继承自INamingContainer?

  3. INamingContainer用于容器控制的功能是什么?

  4. 提前感谢!

1 个答案:

答案 0 :(得分:0)

任何实现此接口的控件都会创建一个新的命名空间,其中所有子控件ID属性都保证是唯一的。

ID由asp.net引擎设置,该引擎在构建控件层次结构时检测控件是否具有此属性。当遇到具有此属性的子控件时,它会更改为此子控件的子项创建ID的方式,因此它们都是唯一的。

该接口称为“marker”,因为它没有方法/属性。它实际上被asp.net引擎用作你班级的标记。

一个方法的例子,它获取所有实现特定属性的类(来自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;
        }
    }
}