XmlReader.Read 方法是abstract,怎么可以不经override直接使用? 你看下XmlReader.Create出来的这个 xml_reader 的具体类型就知道了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 xml_reader这个是XmlReader的具体子类 public abstract class Reader{ public abstract bool Read(); public static Reader Create() { ReaderDummy rd = new ReaderDummy(); return rd.CreateReader(); }}public class ReaderDummy{ public Reader CreateReader() { ReaderImpl reader = new ReaderImpl(); return reader; }}public class ReaderImpl : Reader{ public override bool Read() { return true; }}/////////////////////////////////////////////////////////////////////{ Reader reader = Reader.Create(); reader.Read(); // 调用的是 ReaderImpl.Read}我知道你前面问过这个,给你演示下大概的逻辑关系 放在饭碗里的不一定是饭,所以 XmlReader 中是什么,楼主太想当然了. 3楼用reader的create的实现代码解释了xmlreader的create的实现,非常清楚。其实我发帖前也是这么想的,认为create一定返回了xmlreader的派生类,但我又反复看了msdn,发现没任何一句话解释这个问题,觉得这可能是msdn的疏忽了,但小弟是初学,还没资格质疑msdn,因此发帖质疑下,麻烦各位学兄了。其实我这个帖确实是在钻牛角尖了。以下为为msdn关于create函数的解释:返回值类型:System.Xml.XmlReader用于读取 XML 数据的 XmlReader 对象。 这是面向对象程序设计基本特征中的“多态”的概念(相信你从一开始就知道面向对象基本特征),因此无需解释。就好像人家跟你说“我今天上街买了一双鞋”,你难道非要跟人家争论“棕色鞋不是鞋、男鞋不是鞋、休闲鞋不是鞋”吗?难道人家还得说话时处处小心翼翼地给你解释清楚、而不能使用抽象的“鞋”这么一个字吗?设计类型 XmlReader 干什么?就是用来抽象化其各种派生类的。你在读文档时看到人家写到“返回 XXX 类型”就非要纠结这个名词儿而不能接受派生类的对象,这就相当于纠结于“休闲鞋不是鞋”。 用“放在饭碗里边的是(或者不是)碗”来比喻 --> 用“放在饭碗里边的是(或者不是)饭”来比喻如果思维方式里本身就没有“抽象-扩展”的概念模型,而使用组合的方式来理解编程上的继承概念,可能貌似理解了 XmlReader 类型,但是将来还是会产生更多诡异的新概念新错误出来。继承概念,不能用组合概念来“比喻”。继承所要解决的、所说的不是“碗和饭”的关系,而是“碗和花碗、和瓷碗”的关系。 图片内容不能多次写入,急 C#基础问题,关于类 .net中 截取字符 C#学习源码下载网站 SQL导出数据到Excel出错 关于数据库的几个简单问题 怎么把Wav文件存放到SQL数据库? 据说是世界上目前最好的智力题目 怎样最小化窗口执行程序? 用微软的WIN98作网络开发平台可以吗? 数据库中存在许多xml,怎么批量修改这些xml中的一些内容 QQ空间WEB登录加密方式是怎样的?
public abstract class Reader
{
public abstract bool Read();
public static Reader Create()
{
ReaderDummy rd = new ReaderDummy();
return rd.CreateReader();
}
}
public class ReaderDummy
{
public Reader CreateReader()
{
ReaderImpl reader = new ReaderImpl();
return reader;
}
}
public class ReaderImpl : Reader
{
public override bool Read()
{
return true;
}
}
/////////////////////////////////////////////////////////////////////
{
Reader reader = Reader.Create();
reader.Read(); // 调用的是 ReaderImpl.Read
}我知道你前面问过这个,给你演示下大概的逻辑关系
返回值
类型:System.Xml.XmlReader
用于读取 XML 数据的 XmlReader 对象。
这是面向对象程序设计基本特征中的“多态”的概念(相信你从一开始就知道面向对象基本特征),因此无需解释。就好像人家跟你说“我今天上街买了一双鞋”,你难道非要跟人家争论“棕色鞋不是鞋、男鞋不是鞋、休闲鞋不是鞋”吗?难道人家还得说话时处处小心翼翼地给你解释清楚、而不能使用抽象的“鞋”这么一个字吗?设计类型 XmlReader 干什么?就是用来抽象化其各种派生类的。你在读文档时看到人家写到“返回 XXX 类型”就非要纠结这个名词儿而不能接受派生类的对象,这就相当于纠结于“休闲鞋不是鞋”。