1 //变量obj实际指向的是chinese类型的对象,调用ToString方法的时候,发现object类的tostring()方法是virtual类型, 2 //所以先看chinese类有木有override,如果有则直接调用chinese的override方法, 3 //如果木有则看chinese的父类有没有override, 4 //直接递归到object类,都木有,则调用object的ToString()方法 5 Object obj=new Chinese(); 6 obj.ToString();
CTS(Common Type System)-----bool和Boolean,int和Int32之间的区别:
- .net的VS开发平台支持多语言开发,C#,VB.NET,J#,F#VC++.NET,IronPythron等等;
- bool和int属于C#语言定义的类库,而Boolean和Int32是.NET定义的类库;
- 编译器负责把不同语言的类库统一编译成Boolean和Int32供.net调用。
基于接口编程:
变量(参数、返回值等)的类型能用父类就不要用子类,能用接口就不要用类,返回值、属性、参数等等,类型越靠近Object越好,尽量不要用具体的类型。
- SqlCommand cmd = new SqlCommand();
- SqlCommand cmd = conn.CreateCommand();
- IDbCommand cmd = conn.CreateCommand();
第三种写法最好。
- SQLServer、Access(文件型数据库,连接字符串用VS“服务器资源管理器”生成)的Command分别是SqlCommand、OleDbCommand类型,如果把它们写死在程序里切换数据库需要改很多地方。
- SqlCommand、 OleDbCommand都实现了IDbCommand接口,不用具体的类型来接收返回值,这样就可以将改动减少的最小。
- 以后写程序尽量用IDbConnection、 IDbCommand、IDataParameter这些类型。
- 创建参数用IDataParameter parameter = cmd.CreateParameter();
- 能用父类就不要用子类,能用接口就不要用类
写一个可以通过配置文件来分别从Access、MSSQL中读取数据的类
- 能用父类就不要用子类,能用接口就不要用类----在这个例子中,接口比抽象类更高级。
- SqlConnection类和OracleConnection类都继承自DbConnection类,但DbConnection类实现IDbConnection接口。
- 所以实例化链接时,IDbConnection conn=new SqlConnection();
1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Configuration;//读取App.config的类库 5 using System.Data; 6 using System.Data.OleDb;//链接ACCESS的类库 7 using System.Data.SqlClient;//链接MSSQL的类库 8 using System.Drawing; 9 using System.Text; 10 using System.Windows.Forms; 11 12 namespace 接口ADO 13 { 14 public partial class Form1 : Form 15 { 16 public Form1() 17 { 18 InitializeComponent(); 19 } 20 21 private void btnInsert_Click(object sender, EventArgs e) 22 { 23 //读取App.config中的连接字符串 24 string connStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString; 25 26 //读取App.config中的providerName 27 string providerName = ConfigurationManager.ConnectionStrings["providerName"].ConnectionString; 28 29 //声明IDbConnection类型的变量 30 IDbConnection conn; 31 32 //当App.config中的providerName值为MSSQL 33 if (providerName == "MSSQL") 34 { 35 conn = new SqlConnection(connStr); 36 } 37 //当App.config中的providerName值为ACCESS 38 else if (providerName == "ACCESS") 39 { 40 conn = new OleDbConnection(connStr); 41 } 42 //抛出异常 43 else 44 { 45 throw new Exception("未知providerName"); 46 } 47 //using不能少------Dispose() 48 using (conn) 49 { 50 conn.Open(); 51 52 //using不能少------Dispose() 53 using (IDbCommand cmd = conn.CreateCommand()) 54 { 55 cmd.CommandText = "insert into T_Person(name,age) values(www,18)"; 56 cmd.ExecuteNonQuery(); 57 } 58 } 59 MessageBox.Show("OK"); 60 } 61 } 62 }
多态---设计模式
时间: 2024-10-09 22:54:59