Exposing the indexer / default property via COM Interop

∥☆過路亽.° 提交于 2019-11-28 11:37:49

Try setting the DispId attribute of the property to be 0, as described here in the MSDN documentation.

Here is a better solution that uses an indexer rather than an Item method:

public class MyCollection {
    private NameValueCollection _collection;

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

It can be used from ASP like:

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

Note: I could not get this to work earlier because I had overloaded the indexer, this[string name], with this[int index].

Mike Henry

Thanks to Rob Walker's tip, I got it working by adding the following method and attribute to MyCollection:

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

Edit: See this better solution which uses an indexer.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!