【问题标题】:How to realize INamingContainer,tell me something deeper如何实现INamingContainer,告诉我一些更深的东西
【发布时间】:2013-08-26 07:59:09
【问题描述】:

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

所以,我想知道:

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

  2. 当 CLR 编译器编译从 INamingContainer 继承的控件时会发生什么?

  3. INamingContainer对容器控制有什么作用?

先谢谢了!

【问题讨论】:

标签: c# marker-interfaces


【解决方案1】:

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

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

接口被称为“标记”,因为它没有方法/属性。它实际上被 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;
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-09
    • 2016-04-22
    • 1970-01-01
    • 1970-01-01
    • 2011-12-30
    • 1970-01-01
    相关资源
    最近更新 更多