我正在尝试用新的 .net dll 来模仿旧的 vb6 dll。模仿必须是完美的,以便调用者不知道他们正在使用新的 .dll。
不过我有一个好奇心。在 VB6 中,对象库中有以下内容:
Property BankList(Index As Long) As String
但据我所知,这不能在 .net 中完成?
我能得到的最接近的是创建一个展示该行为的函数,但随后 COM 类型从属性变为方法。
谁能建议我如何使用属性创建该签名?
你可以装饰一个普通的indexer http://msdn.microsoft.com/en-us/library/2549tw02.aspx与IndexerNameAttribute http://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.indexernameattribute.aspx属性以将其名称公开给其他语言。不过,我不确定这是否能实现您的目标。
不幸的是,C# 仅支持调用命名索引器作为 COM 互操作的一部分,没有受支持的语言方式来实现您自己的(即,一个类只能具有默认索引器 http://msdn.microsoft.com/en-us/library/2549tw02%28VS.71%29.aspx与IndexerNameAttribute http://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.indexernameattribute.aspx属性)。
您可以通过使用索引器实现一个类型,然后拥有该类型的属性,来创建与 C# 调用方看起来类似的内容,但它并不完全映射到您需要的 VB6 等效项。
也可以看看:使用索引器 (C#) http://msdn.microsoft.com/en-us/library/2549tw02.aspx
Aside
正如其他答案中提到的,虽然 C# 不支持命名索引器,但 .NET CLR 和其他一些语言(例如 VB.NET)支持命名索引器。您可能需要考虑更改目标语言才能获得此功能。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)