0

カスタム コンテナ コントロールを実装したい場合は、コントロールを INamingContainer から継承し続ける必要があります。これは、マーカー インターフェイスとして定義されたインターフェイスです。私が知っているように、CLR は属性のようなメタデータにコントロール ステートメントを作成します。

だから、知りたい:

  1. .net フレームワーク システムは、それ自体のマーカー インターフェイスのメタデータを作成しただけですか? マーカー インターフェイスを作成できますか?

  2. CLR コンパイラが INamingContainer から継承したコントロールをコンパイルするとどうなりますか?

  3. コンテナ制御のためのINamingContainerの機能は何ですか?

よろしくお願いします!</p>

4

1 に答える 1

0

このインターフェイスを実装するすべてのコントロールは、すべての子コントロール ID 属性が一意であることが保証される新しい名前空間を作成します。

ID は asp.net エンジンによって設定され、コントロール階層を構築するときにコントロールにこの属性があるかどうかを検出します。この属性を持つ子コントロールに遭遇すると、この子コントロールの子の ID を作成する方法を変更して、それらがすべて一意になるようにします。

メソッド/プロパティがないため、インターフェイスは「マーカー」と呼ばれます。実際には、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;
        }
    }
}
于 2013-08-23T10:10:13.020 に答える