小弟初学.net ,对.net中各种对象的使用实在找不到什么规律,甚至写条赋值语句都出错,原因就是不知道类的继承关系。
感觉.net在易用性方面远不如Delphi。Delphi中,只要按F1,就可知道对象所属类型以及该类型的继承层次关系,一目了然,从而赋值时也就不会出现类型不相容的错误。而到了.net中,一切都变得混乱不堪了。
比如:为什么一会儿可以
SqlDataReader odr = cmd.ExecuteReader();
BindingSource bs = new BindingSource();
bs.DataSource = odr;
dataGridView1.DataSource=bs;一会儿又可以写成:
sqlDataAdapter1.Fill(dataSet1, "ryjk");
dataGridView1.DataSource=dataSet1; dataGridView1的DataSource属性,其类型究竟是什么?是DataSet还是BindingSource ? 或者BindingSource 是从DataSet继承而来? 可又查不到BindingSource类与DataSet类的继承关系? 哪位高手能给小弟指点迷津,不胜感激!(100分奉上)
感觉.net在易用性方面远不如Delphi。Delphi中,只要按F1,就可知道对象所属类型以及该类型的继承层次关系,一目了然,从而赋值时也就不会出现类型不相容的错误。而到了.net中,一切都变得混乱不堪了。
比如:为什么一会儿可以
SqlDataReader odr = cmd.ExecuteReader();
BindingSource bs = new BindingSource();
bs.DataSource = odr;
dataGridView1.DataSource=bs;一会儿又可以写成:
sqlDataAdapter1.Fill(dataSet1, "ryjk");
dataGridView1.DataSource=dataSet1; dataGridView1的DataSource属性,其类型究竟是什么?是DataSet还是BindingSource ? 或者BindingSource 是从DataSet继承而来? 可又查不到BindingSource类与DataSet类的继承关系? 哪位高手能给小弟指点迷津,不胜感激!(100分奉上)
不是。那是因为datasource根本就是设置为object类型,没有设置为强类型。.net中绝大部分还是强类型的,但是并不缺乏弱类型编程的能力。
甭管中毒delphi太深还是中毒.net太深,关键是不要只看接口定义然后抱着一些个入门书(以及msdn)去揣摩如何应用它,应该去看它本身的源代码然后再揣摩。只有源代码才不会骗你,那些教授写的书(何况许多是抄袭拼凑国外的书)上的以及msdn上都都可能骗你的。
简单讲,就像:不管什么职务,上帝,老板,总统,你,我,都是人……见5#~~~
在Delphi中,一切对象的祖先类型都是Object类型,但举例来说:
TADOTable、TADOQuery、TADODataset的“爷爷”都是Dataset(都继承自Dataset),所以一看就明白,它们都可以作为DBGrid的数据源很清晰啊!而如果你只知道TADOTable、TADOQuery、TADODataset的“父亲”是Object,那不等于什么都不知道?(这个是地球人都知道的!)
IList 接口。
IListSource 接口。
IBindingList 接口,。
IBindingListView 接口。
去试试吧
嗯,我查了一下源代码,System.Web.UI.WebControls.BaseDataBoundControl的datasource确实是空洞的Object类型的。至于说“傻瓜”,只有傻瓜自己认识到自己是傻瓜才不是傻瓜,你不能怪人家不按着你的头去教你看吧!
vs的ObjectBrowser?反正vs还是很全面地。
delphi的VCL就像是一棵树,我可以从任何一个树梢(具体的对象)顺藤摸瓜到树根,所有源代码都能一行不漏、清清楚楚了呈现在你眼前。你也可以从任何一个树枝(中间类)甚至从树根(TObject)来创建自己的类。而且一旦你会用某个对象,那么凡是从该对象所属类派生出来的其它对象,你几乎都会用。