c#,接口,赋值



我有个问题。接口不包含任何定义。无法实例化接口。此代码如何有效?

IDataReader reader = cmd.ExecuteReader()

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

ExecuteReader不返回对象-它返回对某种类型的对象的引用,该对象实现IDataReader(当然是null)。

其思想是,调用者/客户端不需要知道实现类,只需要知道它实现了接口。当客户端调用诸如reader.Next()之类的方法时,该方法将使用基于reader值所指对象的执行时间类型的实现。

为变量指定引用值不会更改该引用所引用的对象的类型。例如:

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

现在otext具有相同的值——对相同字符串的引用。如果您拨打:

Type t = o.GetType();

其仍将返回对表示System.StringType对象的引用,因为o的值指代String对象;访问对象的变量的类型不会更改对象的执行时间类型。

虽然不能实例化接口,但可以实例化实现该接口的对象。然后接口类型可以引用该对象。这就是上面的代码正在做的事情。

cmd.ExecuteReader()不创建并返回IDataReader实例;它返回一个恰好实现CCD_ 13的对象(也可以实现任何数量的其他接口)。因此,您可以为声明为接口类型的变量或字段赋值,但不能创建接口类型的实例。

相关内容

  • 没有找到相关文章

最新更新