了解程序中的接口实现?

时间:2015-07-18 22:45:09

标签: c# entity-framework

我正在尝试了解这行代码发生了什么。它看起来像这样:

var adapter = (IObjectContextAdapter) db

其中db是实体框架内的数据库上下文。

首先,为什么界面上有括号?如果我把它们取下来我有一个编译错误,所以这告诉我有一些类型的语义在起作用,这些括号告诉计算机做某事。

我假设db正在实现接口,我是否正确?如果是这样的话,他们为什么要写这样的代码呢?

2 个答案:

答案 0 :(得分:2)

  

首先,为什么界面上有括号?

db是一个对象(来自您的帖子,我们无法说明db的类型)。使用括号将此对象强制转换为实现此接口的对象IObjectContextAdapter

  

我假设db正在实现接口,我是否正确?

这是对的。

答案 1 :(得分:1)

括号是C#显式转换运算符,因此它们本身并不特别与接口相关。

您在某个特定界面中使用强制转换的原因之一就是在您不知道给定对象的类型时,但您确实知道它实现了给定的接口。当您调用无法控制的代码时,就会发生这种情况。

该界面充当您,用户和实现该对象类的人之间的“契约”。您可以保证该对象将实现指定的接口,然后您可以调用此对象上的接口定义的方法和属性。

希望这有帮助。

编辑:

他们使用强制转换的另一个原因是,如果类/对象实现了多个接口,并且他们希望确保将调用IObjectContextAdapter方法。这被称为Explicit Interface Implementation