2015-07-18 38 views
-1

我想了解这行代码是怎么回事。它看起来像这样:理解程序中的接口实现?

var adapter = (IObjectContextAdapter) db 

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

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

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

+0

https://msdn.microsoft.com/en-us/library/ms173105.aspx – Enigmativity

回答

1

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

为什么要在特定的接口上使用强制类型转换的原因之一就像您在示例中那样,当您不知道给定对象的类型时,但您确实知道它实现了给定接口。当你调用你没有控制权的代码时,会发生这种情况。

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

希望这会有所帮助。

编辑:

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

2

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

db是一个对象(从您发布,我们也不能说什么的db类型)。使用括号将此对象转换为实现此接口的对象,IObjectContextAdapter

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

这是正确的。

+0

但我不明白,为什么我们会这样键入?如果这个变量db已经实现了这个接口,为什么我们这样做? – Aldmeri

+0

您能告诉我们在哪里使用名为'adapter'的变量吗? – Christos

+0

@Amemeri如果变量'db'已经实现'IObjectContextAdapter',那么你并不需要施放它。也许编程人员希望'adapter'成为'IObjectContextAdapter'类型的一个特别引用,并且不知道它们可以将'var'更改为'IObjectContextAdapter',并且分配可以工作。或者他们可能没有足够的咖啡。我不知道。 –