首页 > 代码库 > 多态---设计模式
多态---设计模式
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 接口ADO13 {14 public partial class Form1 : Form15 {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中的providerName27 string providerName = ConfigurationManager.ConnectionStrings["providerName"].ConnectionString;28 29 //声明IDbConnection类型的变量30 IDbConnection conn;31 32 //当App.config中的providerName值为MSSQL33 if (providerName == "MSSQL")34 {35 conn = new SqlConnection(connStr);36 }37 //当App.config中的providerName值为ACCESS38 else if (providerName == "ACCESS")39 {40 conn = new OleDbConnection(connStr);41 }42 //抛出异常43 else44 {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 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。