二、C#面向对象基础
初学者学面向对象的时候没必要(也做不到)把面向对象学的非常透、非常深,因为如果想深刻的理解面向对象,必须要有大量的编程经验才能真正体会面向对象到底是怎么回事、有什么好处。以前听到过有人建议初学者学习设计模式,我认为纯属误人子弟,对于初学者来说没有大量的编程经验,根本看不懂设计模式在说什么。这个阶段只要弄明白怎么声明类、什么是访问级别(主要是public、private)、什么是属性、字段、方法、什么是继承、什么是override就可以。面向对象有三个特性:封装、继承、多态。对于初学者来说理解多态是非常困难的也是没太大必要的,这个阶段只要能掌握封装和继承就可以。
三、简单的WinForm编程
WinForm是.Net中用来构建Windows窗体应用程序的技术,对于目前国内市场来讲一般也就是用来桌面版管理系统等的技术。有人会问“我们不是学B/S的ASP.Net开发吗?为什么还要学C/S的WinForm?”,一定要注意我在这段的标题写的是“简单的”WinForm。和ASP.Net比较起来,学WinForm需要学习的前置知识非常少,可以非常快的入手开发,而学习ASP.Net则需要先学习HTML、JavaScript、Dom等知识。这个阶段的学习重点不是WinForm本身,而是通过WinForm在案例中理解类、对象、属性、方法、事件、索引器等概念,我们是“借壳学习”,因此不用对WinForm的深入技术(比如控件美化、布局、PInvoke、托盘编程、高级控件、ActiveX等)浪费时间去研究。初学者很难把握WinForm学习的度,还是推荐大家参考看我录制的视频教程《【传智播客.Net视频】第3季WinForm基础》。
四、常用.Net Framework类
.Net Framework中的类是.Net中最丰富、最有价值的内容,.Net Framework中的类是和表现层无关的,也就是无论是在控制台中、WinForm中还是ASP.Net中都可以调用这些类,比如把一个字符串转换为整数都是使用Convert.ToInt32()这个方法,因此千万不能因为你是在控制台程序中写这些类就认为自己在“编写DOS程序”。
.Net Framework是非常庞大的,拥有上万个类,没必要把这几万个类掌握,在这个阶段把常用的.Net Framework类掌握了,会对后续阶段的学习非常有帮助。这些类包括:String类常用方法、StringBuilder类、IO类(FileStream、File、Path)、XML操作类、集合类(ArrayList、List<T>、Dictionary<K,V>)等。
五、SQL语句
这个阶段主要学习SQL语法,能够掌握常见的SQL语法。数据库管理系统有MSSQLServer、Oracle、MySQL、DB2、Access等,这些不同的系统对于数据库管理员来说使用方法各异,但是对于开发人员来说差不多,因为都是用的统一的操作语言“SQL”,通过SQL这门通用的语言,你可以和不同的数据库进行沟通,所以只要掌握了.Net开发最常用的MSSQLServer,以后根据工作的需要使用其他的数据库管理系统会非常简单。
现在企业招聘.Net开发人员的时候对于数据库考查非常多,甚至很多公司的笔试题中有1/3都是关于SQL语句、存储过程的,因此对于准备学习后找工作的同学来说必须把这部分内容学好。
这部分内容主要学习:MSSQLServer的简单管理,Select、Insert、Update、Delete语句,学完了这些内容就可以继续学习后续的ADO.Net了。学有余力的同学可以学习Join、Union、子查询、存储过程等高级的内容。
这部分内容学习时大家可以参考我的《程序员的SQL金典》这本书(我将近期发布这本书的全部免费电子版)和《 【传智播客.Net视频】第4季SQL从入门到提高》。这套视频教程。
六、ADO.Net
ADO.Net是.Net中用来访问数据库的技术,通过ADO.Net我们就能通过程序告诉数据库“请把年龄大于20岁的人员返回给我”。在学习ADO.Net之前一定要把常用的SQL语句掌握了,千万不能学了一句Select * from Persons就来学ADO.Net,否则可能会出现下面这个真实的故事中的笑话了:
我以前碰到过一个人写一个“查询学号为S001的学生的姓名”的功能,他这么写程序(示例性代码,不严谨):
SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = “Select * from Persons”;
SqlDataReader reader = cmd.ExecuteReader();
while(reader.Read())
{
String no = (string)reader[ “No”];
if(no==” S001”)
{
string name = (string)reader[ “Name”];
MessageBox.Show(name);
}
}
看到这种写法相信所有人都要崩溃了,因为好像从来没学过where语句一样。因此必须在把常用的SQL语句掌握以后再来学ADO.Net。
这阶段的学习主要学习使用SqlConnection、SqlCommand(ExecuteNonQuery、ExecuteReader、ExecuteScalar)等类的使用、参数化查询等,掌握DataSet方式使用离线数据集,能够自己从头写一个SqlHelper类出来即可。
(注:这段我描述的是ADO.Net基于接口的编程,属于深入一点的知识,对于初学者来说如果看不懂也没关系,不用纠结于此)SqlConnection、SqlCommand等类是ADO.Net中用来连接MSSQLServer的类,连接Oracle等数据库则使用OracleConnection、OracleCommand等类,虽然看似不同的类,但是由于ADO.Net通过IDbConnection、IDbCommand等接口统一了类的方法,所以OracleConnection、OracleCommand等类的用法和SqlConnection、SqlCommand基本一样,而且如果通过DbProviderFactories进行基于接口的ADO.Net编程,那么编程的时候就是使用IDbConnection、IDbCommand接口,完全不用管SqlConnection、OracleConnection等这些不同的类。学有余力的同学可以深入研究一下ADO.Net的接口编程,会对你理解设计模式有很大的帮助。