我想了解这行代码是怎么回事。它看起来像这样:理解程序中的接口实现?
var adapter = (IObjectContextAdapter) db
其中db
是实体框架内的数据库上下文。
首先,为什么界面上的括号?如果我把它们关闭,我有一个编译错误,所以这告诉我有一些类型的语义在玩,并且这些括号告诉计算机做某事。
我假设db正在实现接口,我是否正确?为什么他们编写这样的代码如果是这样的话?
我想了解这行代码是怎么回事。它看起来像这样:理解程序中的接口实现?
var adapter = (IObjectContextAdapter) db
其中db
是实体框架内的数据库上下文。
首先,为什么界面上的括号?如果我把它们关闭,我有一个编译错误,所以这告诉我有一些类型的语义在玩,并且这些括号告诉计算机做某事。
我假设db正在实现接口,我是否正确?为什么他们编写这样的代码如果是这样的话?
圆括号是C#显式转换运算符,因此它们本身并没有与接口特别相关。
为什么要在特定的接口上使用强制类型转换的原因之一就像您在示例中那样,当您不知道给定对象的类型时,但您确实知道它实现了给定接口。当你调用你没有控制权的代码时,会发生这种情况。
该接口充当您,用户以及实现该对象类的人之间的“契约”。您可以保证对象将实现指定的接口,然后可以调用此对象上接口定义的方法和属性。
希望这会有所帮助。
编辑:
另一个原因是他们将使用一个转换是如果类/对象实现多个接口,并且他们希望确保该IObjectContextAdapter
方法将被调用。这被称为Explicit Interface Implementation
首先,为什么界面上的括号?
的db
是一个对象(从您发布,我们也不能说什么的db
类型)。使用括号将此对象转换为实现此接口的对象,IObjectContextAdapter
。
我假设db正在实现接口,我是否正确?
这是正确的。
https://msdn.microsoft.com/en-us/library/ms173105.aspx – Enigmativity