一个类如何在不实现其中一个函数的情况下实现接口
本文关键字:一个 实现 函数 接口 情况下 | 更新日期: 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# 接口。隐式实现与显式实现