一个类如何在不实现其中一个函数的情况下实现接口

本文关键字:一个 实现 函数 接口 情况下 | 更新日期: 2023-09-27 18:31:39

我注意到TFS API中的一个类中存在一种非常奇怪的行为,看起来像是破坏了语言的定义。

我试图模仿它,但没有成功,我尝试实现集合,但不让使用该类的人调用索引器资源库,就像在 WorkitemCollection 类中所做的那样。重要的是,错误将在完成时而不是运行时呈现,因此异常无效。WorkitemCollection 正在实现一个 IReadOnlyList,该列表正在实现一个集合。根据定义,集合具有索引公共获取和设置。然而,这段代码返回了一个编译错误:

WorkitemCollection wic=GetWorkitemCollection();
wic[0]=null;

为什么会这样?提前谢谢。

一个类如何在不实现其中一个函数的情况下实现接口

解决方案是显式接口实现。这实质上使该方法在处理实现接口的类时私有。但是,仍然可以通过将类的实例强制转换为实现接口来调用它,因此您仍然需要引发异常。

public class Implementation : IInterface
{
    void IInterface.SomeMethod()
    {
        throw new NotSupportedException();
    }
}
var instance = new Implementation();
instance.SomeMethod(); // Doesn't compile
var interfaceInstance = (IInterface)instance;
interfaceInstance.SomeMethod(); // Compiles and results in the
                                // NotSupportedException being thrown

您可以显式实现接口:

int IReadOnlyList.Index
{
    get;
    set;
}

这样,如果不先强制转换对象,就无法调用Index

((IReadOnlyList)myObj).Index

请参阅 C# 接口。隐式实现与显式实现