gpt4 book ai didi

C# 为什么从类中调用接口(interface)成员会产生错误?

转载 作者:行者123 更新时间:2023-11-30 13:32:40 25 4
gpt4 key购买 nike

所以我有一个界面:

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 转换为 IFoo,但我也知道转换对性能的影响很大,这通常是首先使用接口(interface)的原因。

编辑 1:这些是产生的错误

“Foo”不包含“Bar”的定义,并且找不到接受“Foo”类型的第一个参数的扩展方法“Bar”(您是否缺少 using 指令或程序集引用?)

“无法将索引应用于‘Foo’类型的表达式”

最佳答案

你已经 explicitly implemented IFoo,这意味着它的成员只能通过明确类型化为 IFoo 的引用访问:

// This will work
Foo fooey = new Foo();
int i = ((IFoo)fooey).Bar();

如果您希望成员在不强制转换的情况下可见,那么在您的实现中只需使用成员名称本身,而不用接口(interface)名称作为前缀:

class Foo : IFoo
{
public int Bar() { /* implementation */ }
public int this[int i] { /* implementation */ }
}

// now this will also work:
Foo fooey = new Foo();
int i = fooey.Bar();

关于C# 为什么从类中调用接口(interface)成员会产生错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12523793/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com