C++/CLI:实现 IList 和 IList (默认索引器的显式实现)
我正在尝试实现一个同时实现 IList
和 IList
的 C++/CLI 类。
由于它们的名称重叠,我必须显式实现其中之一,自然的选择应该是 IList。
索引器的隐式实现是:
using namespace System::Collections::Generic;
generic<class InnerT> public ref class MyList : public System::Collections::IList, IList<InnerT> {
// ...
property InnerT default[int]{
virtual InnerT get(int index);
virtual void set(int index, InnerT item);
}
}
我现在尝试声明 IList 的默认索引器。
我的猜测是这样的:
property Object^ System::Collections::IList::default[int]{
virtual Object^ System::Collections::IList::get(int index);
virtual void System::Collections::IList::set(int index, Object^ item);
}
但这只是给了我
错误 C2061:语法错误:标识符“默认”
有任何提示吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
JaredPar 的回答 几乎成功了。 应该更改两件事:
IE:
JaredPar's answer almost worked. Two things should be changed:
I.e.:
尚未在 C++/CLI 中完成大量接口,但这似乎已涵盖 C++/CLI 规范。 我相信您正在寻找的功能是明确的压倒性的。 在这里,您必须在定义之后指定实现的成员,如下所示。
Haven't done a lot of interfaces in C++/CLI but this appears to be covered 8.8.10.1 of the C++/CLI spec. I believe the feature you're looking for is explicit overriding. In this you must specify the implemented member after the definition like so.
我编译了一个实现用 C# 显式编写的
IList
的类,并使用 Reflector 打开它并反汇编为 C++/CLI。但它无法编译:
get_Item
、set_Item
不是IList
的成员;I compiled a class implementing
IList<T>
explicitly written in C# and opened it with Reflector and disassembled to C++/CLI.But it doesn't compile:
get_Item
,set_Item
is not a member ofIList<T>
;