質問

C#でコンポーネントを記述して、コンポーネントのインデクサー(デフォルトプロパティ)にアクセスできるようにするクラシックASPで使用しようとしています。

例:
C#コンポーネント:

public class MyCollection {
    public string this[string key] {
        get { /* return the value associated with key */ }
    }

    public void Add(string key, string value) {
        /* add a new element */
    }
}

ASPコンシューマー:

Dim collection
Set collection = Server.CreateObject("MyCollection ")
Call collection.Add("key", "value")
Response.Write(collection("key")) ' should print "value"

設定する必要がある属性はありますか、インターフェイスを実装する必要がありますか、それとも何か他のことをする必要がありますか?または、これはCOM相互運用機能では不可能ですか?

目的は、これらの既定のプロパティ( Request.QueryString(" key"など)を使用してコレクションを使用する、Requestなどの組み込みASPオブジェクトのテストダブルを作成しようとすることです))。別の提案を歓迎します。

更新:フォローアップの質問をした:なぜ.NETコンポーネントのインデクサーがVBScriptからアクセスできないのですか?

役に立ちましたか?

他のヒント

Item メソッドではなく、インデクサーを使用するより良いソリューションを次に示します。

public class MyCollection {
    private NameValueCollection _collection;

    [DispId(0)]
    public string this[string name] {
        get { return _collection[name]; }
        set { _collection[name] = value; }
    }
}

次のようにASPから使用できます。

Dim collection
Set collection = Server.CreateObject("MyCollection")
collection("key") = "value"
Response.Write(collection("key")) ' should print "value"

注:インデクサー this [string name] this [int index] でオーバーロードしたため、これを以前に動作させることができませんでした。

Rob Walkerのヒントのおかげで、MyCollectionに次のメソッドと属性を追加することで機能しました。

[DispId(0)]
public string Item(string key) {
    return this[key];
}

編集:インデクサーを使用するこの優れたソリューションを参照してください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top