如何解决c#,接口,赋值
| 我有个问题。接口不包含任何定义。接口无法实例化。此代码如何有效?IDataReader reader = cmd.ExecuteReader()
cmdExecuteReader返回一个具有内存值的对象。阅读器是界面。如何将对象分配给接口? isnt接口只是一个合同,里面没有方法定义吗?
解决方法
ExecuteReader
不返回对象-它返回对实现IDataReader
(当然为null)的某种类型的对象的引用。
这样的想法是,调用者/客户端不需要了解实现类,只需知道它实现了接口即可。当客户端调用诸如“ 3”之类的方法时,它将使用基于“ 4”的值所引用的对象的执行时间类型的实现。
为变量分配引用值不会更改该引用所引用的对象的类型。例如:
string text = \"hello\";
object o = text;
现在o
和text
具有相同的值-对相同字符串的引用。如果您致电:
Type t = o.GetType();
因为o
的值引用了String
对象,所以仍将返回对表示System.String
的Type
对象的引用;您用来访问对象的变量的类型不会更改对象的执行时间类型。
,虽然无法实例化接口,但是可以实例化实现该接口的对象。然后可以通过接口类型引用该对象。那就是上面的代码正在做的事情。
,cmd.ExecuteReader()
不会创建并返回an2ѭ实例;它返回一个碰巧实现IDataReader
的对象(也可能实现任何数量的其他接口)。因此,您可以将值分配给声明为接口类型的变量或字段,但不能创建接口类型的实例。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。