所以我有一个界面:
interface IFoo
{
int Bar();
int this[int i] {get; set;}
}
以及派生自它的类
class Foo : IFoo
{
public int IFoo.Bar()
{
//Implementation
{
public int IFoo.this[int i]
{
//Implementation
}
}
现在,我尝试这样做:
var fooey = new Foo();
int i = Fooey.Bar();
或这个:
int i = Fooey[4];
我希望这些能够正常工作。但是,编译器会生成错误,就好像此类成员不存在一样。这是为什么?我知道我可以Foo as IFoo
强制转换,但我也知道强制转换对性能来说代价高昂,这通常是首先使用接口的原因。
编辑 1:这些是生成的错误
“Foo”不包含“Bar”的定义,并且找不到接受“Foo”类型的第一个参数的扩展方法“Bar”(您是否缺少 using 指令或程序集引用?)
“无法将索引应用于‘Foo’类型的表达式”