我有一个问题。接口(interface)不包含任何定义。接口(interface)不能被实例化。此代码如何有效?
IDataReader reader = cmd.ExecuteReader()
cmdExecuteReader 返回一个在内存中有值的对象。读者是接口(interface)。如何将对象分配给接口(interface)?接口(interface)不只是一个内部没有方法定义的契约吗?
最佳答案
ExecuteReader
不返回一个对象 - 它返回一个引用到一个实现了IDataReader
的某种类型的对象。 (或者当然是 null)。
这个想法是调用者/客户端不需要知道实现类,只需要知道它实现了接口(interface)。当客户端调用类似 reader.Next()
的方法时,这将使用基于对象的执行时间类型的实现,reader
的值|指的是。
将引用值分配给变量不会更改该引用所指对象的类型。例如:
string text = "hello";
object o = text;
现在o
和 text
具有相同的值 - 对相同字符串的引用。如果你打电话:
Type t = o.GetType();
仍然会返回对 Type
的引用表示 System.String
的对象,因为 o
的值指的是 String
目的;您通过其访问对象的变量类型不会更改对象的执行时类型。
关于c#, 接口(interface), 赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6137492/