索引器的默认实现[重复]

问题描述 投票:0回答:1

我下面的代码有什么问题,或者,如果默认情况下不使用默认索引器实现,那么它的意义何在?

public interface IFoo {
    string this[string key] { get => "Default string index getter"; }
}


// Implementor
public class Foo : IFoo {}

// Usage
Foo myFoo = new();
var bar = myFoo["KEY"];

--> Cannot apply indexing to an expression of type 'Baz.Foo'
c# interface traits default-implementation
1个回答
0
投票

发生这种情况是因为您是按类引用它,而不是按接口。

如果你使用的话效果很好:

// Usage
IFoo myFoo = new Foo();
var bar = myFoo["KEY"];

默认情况下,为什么类不使用接口默认值?微软说:

从 SampleCustomer 到 ICustomer 的转换是必要的。这 SampleCustomer 类不需要提供实现 计算忠诚度折扣;这是由 ICustomer 接口提供的。 但是,SampleCustomer 类不会从其继承成员 接口。这条规则没有改变。为了调用任何方法 在接口中声明和实现的变量必须是 接口的类型,本例中为 ICustomer。

来源:https://learn.microsoft.com/en-us/dotnet/csharp/advanced-topics/interface-implementation/default-interface-methods-versions

© www.soinside.com 2019 - 2024. All rights reserved.