如果我想实现自定义容器控件,我必须保持我的控件继承自INamingContainer,这是一个接口被定义为标记接口。据我所知,这将使CLR创建控制语句为元数据,如属性。
所以,我想知道:
.net框架系统是否只为自己的标记界面创建了元数据? 我可以创建标记界面吗?
CLR编译器编译控件时会发生什么情况继承自INamingContainer?
INamingContainer用于容器控制的功能是什么?
提前感谢!
答案 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;
}
}
}