c#, 接口(interface), 赋值

标签 c# variable-assignment idatareader

我有一个问题。接口(interface)不包含任何定义。接口(interface)不能被实例化。此代码如何有效?

IDataReader reader = cmd.ExecuteReader()

cmdExecuteReader 返回一个在内存中有值的对象。读者是接口(interface)。如何将对象分配给接口(interface)?接口(interface)不只是一个内部没有方法定义的契约吗?

最佳答案

ExecuteReader不返回一个对象 - 它返回一个引用到一个实现了IDataReader的某种类型的对象。 (或者当然是 null)。

这个想法是调用者/客户端不需要知道实现类,只需要知道它实现了接口(interface)。当客户端调用类似 reader.Next() 的方法时,这将使用基于对象的执行时间类型的实现,reader 的值|指的是。

将引用值分配给变量不会更改该引用所指对象的类型。例如:

string text = "hello";
object o = text;

现在otext具有相同的值 - 对相同字符串的引用。如果你打电话:

Type t = o.GetType();

仍然会返回对 Type 的引用表示 System.String 的对象,因为 o 的值指的是 String目的;您通过其访问对象的变量类型不会更改对象的执行时类型。

关于c#, 接口(interface), 赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6137492/

相关文章:

c# - 当图片框位于另一个图像上方时如何使它透明

c# - 解析多行固定格式文本文件

c++ - C++中对象的赋值

c# - 从 IDataReader 获取值的 Null 安全方法

wcf - C#中如何将IDataReader转换为Stream

c# - 在 C# 中,如何将空检查添加到动态快速代码中

c# - 如何使证书中的私钥不可导出 C#

algorithm - 通路/道路铺设问题

c++ - 分配相同类时上层类和继承类指向的区别

c# - 调用 ExecuteReader 时从 DAL 基类处置 SqlConnection