c#,接口,赋值

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)

现在,otext具有相同的值-同一个字符串的引用.如果你打电话:

Type t = o.GetType();
Run Code Online (Sandbox Code Playgroud)

仍然会返回对Type表示对象的引用System.String,因为值是oString对象; 访问对象的变量类型不会更改对象的执行时类型.