c#,接口,分配
我有个问题。接口不包含任何定义。接口无法实例化。这个代码怎么可能有效c#,接口,分配,c#,variable-assignment,idatareader,C#,Variable Assignment,Idatareader,我有个问题。接口不包含任何定义。接口无法实例化。这个代码怎么可能有效 IDataReader reader = cmd.ExecuteReader() cmdExecuteReader返回内存中具有值的对象。读卡器是接口。如何将对象指定给接口?接口不只是一个内部没有方法定义的契约吗?ExecuteReader不返回对象-它返回对某种类型的对象的引用,该对象实现了IDataReader(当然也可以为null) 其思想是调用方/客户机不需要知道实现类,只需要知道它实现了接口。当客户端调用诸如rea
IDataReader reader = cmd.ExecuteReader()
cmdExecuteReader返回内存中具有值的对象。读卡器是接口。如何将对象指定给接口?接口不只是一个内部没有方法定义的契约吗?
ExecuteReader
不返回对象-它返回对某种类型的对象的引用,该对象实现了IDataReader
(当然也可以为null)
其思想是调用方/客户机不需要知道实现类,只需要知道它实现了接口。当客户端调用诸如reader.Next()
之类的方法时,该方法将根据reader
的值所引用的对象的执行时间类型使用实现
将引用值指定给变量不会更改该引用所引用的对象的类型。例如:
string text = "hello";
object o = text;
现在o
和text
具有相同的值-对相同字符串的引用。如果你打电话:
Type t = o.GetType();
它仍将返回对表示
System.String
的Type
对象的引用,因为o
的值引用的是String
对象;用于访问对象的变量类型不会更改对象的执行时间类型。虽然不能实例化接口,但可以实例化实现接口的对象。然后可以通过接口类型引用该对象。这就是上面的代码所做的。cmd.ExecuteReader()
不创建并返回IDataReader
实例;它返回一个恰好实现IDataReader
(也可以实现任意数量的其他接口)的对象。因此,可以为声明为接口类型的变量或字段赋值,但不能创建接口类型的实例