当接口之间似乎没有继承关系时,为什么两个接口之间的转换可以工作?

Tim*_*Tim 0 c#

我试图理解其他人编写的一些代码.因为我不允许发布也很复杂的原始代码,所以我必须简化它

IAData a = SomeProperty;
IBData b = a as IBData;
BData ret = b.B;
Run Code Online (Sandbox Code Playgroud)

where IADataIBData是两个接口:

public interface IBData
{
    BData B { get; set; }
}

public interface IAData
{
    void Clear();
}
Run Code Online (Sandbox Code Playgroud)

private IAData _aData;
public IAData SomeProperty { get { return _aData; } }
Run Code Online (Sandbox Code Playgroud)

为什么可以a显式转换为b,因为似乎有之间没有继承关系IADataIBData

我错过了什么吗?如果我过多地简化代码,请道歉.

谢谢.

Jak*_*rtz 6

一个类可以实现多个接口

interface IA { }
interface IB { }
class C : IA, IB { }
Run Code Online (Sandbox Code Playgroud)

在这种情况下,从一个接口到另一个接口的转换是有效的

IA a = new C();
IB b = a as IB;
Run Code Online (Sandbox Code Playgroud)

  • @Tim 假设因为某些东西实现了`IAData`,它也将实现`IBData` 不是一个好习惯。除非`IAData`继承自`IBData`。但是一个实现多个接口的类并没有错。如果您认为实现了“IAData”的类可能会实现“IBData”,则可以使用“as”(带有空检查)或“is”来查看它是否可以实现。但是你应该有逻辑来处理它没有的情况。 (2认同)