C++/CLI:实现IList和IList <T>(显式实现默认索引器)

Ras*_*ber 5 c++-cli indexer explicit-interface

我想实现的是同时实现了一个C++/CLI类IListIList<T>.

由于它们具有重叠的名称,我必须明确地实现其中一个,并且自然选择应该是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);
  }
}
Run Code Online (Sandbox Code Playgroud)

我现在正在尝试声明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);
  }
Run Code Online (Sandbox Code Playgroud)

但那只是给了我

错误C2061:语法错误:标识符'default'

任何提示?

Ras*_*ber 5

JaredPar的答案几乎奏效了.应该改变两件事:

  • indexer-property需要一个不同的名称,因为隐式实现已经采用了"default".
  • 覆盖的规范需要在set-和get-methods上完成,而不是在属性本身上完成.

即:

  property Object^ IListItems[int]{
    virtual Object^ get(int index) = System::Collections::IList::default::get;
    virtual void set(int index, Object^ item)  = System::Collections::IList::default::set;
  }
Run Code Online (Sandbox Code Playgroud)