通过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