通过COM Interop公开索引器/默认属性

我正在尝试在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 Interop?

目的是我试图为一些内置的ASP对象(如Request)创建测试双打,这些对象使用这些默认属性(如Request.QueryString("key") )使用集合。 欢迎提供其他建议。

更新:我问了一个后续问题:为什么我的.NET组件上的索引器无法始终从VBScript访问?


尝试将属性的DispId属性设置为0,如此处在MSDN文档中所述。


这是使用索引器而不是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[int index]重载了索引器, this[string name] ,所以我无法提前工作。


感谢Rob Walker的提示,我通过将以下方法和属性添加到MyCollection中:

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

编辑:看看这个更好的解决方案,它使用索引器。

链接地址: http://www.djcxy.com/p/61135.html

上一篇: Exposing the indexer / default property via COM Interop

下一篇: How do I email a FlowDocument and retain its formatting