ava*_*ast 2 c# variable-assignment idatareader
我有个问题.接口不包含任何定义.接口无法实例化.这段代码怎么有效?
IDataReader reader = cmd.ExecuteReader()
Run Code Online (Sandbox Code Playgroud)
cmdExecuteReader返回一个在内存中具有值的对象.读者是界面.如何将对象分配给接口?isnt接口只是一个没有方法定义的契约?
Jon*_*eet 10
ExecuteReader
不返回一个对象 - 它返回对某个实现的类型的对象的引用IDataReader
(当然是null).
这个想法是调用者/客户端不需要知道实现类,只是它实现了接口.当客户端调用诸如的方法时reader.Next()
,将使用基于引用值的对象的执行时类型的reader
实现.
为变量分配引用值不会更改该引用所引用的对象的类型.例如:
string text = "hello";
object o = text;
Run Code Online (Sandbox Code Playgroud)
现在,o
与text
具有相同的值-同一个字符串的引用.如果你打电话:
Type t = o.GetType();
Run Code Online (Sandbox Code Playgroud)
仍然会返回对Type
表示对象的引用System.String
,因为值是o
指String
对象; 访问对象的变量类型不会更改对象的执行时类型.