多态---设计模式

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越好,尽量不要用具体的类型。

  1. SqlCommand cmd = new SqlCommand();
  2. SqlCommand cmd = conn.CreateCommand();
  3. 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

多态---设计模式的相关文章

iOS经典面试题

转自:http://www.cnblogs.com/SharkBin/p/4618388.html 前言 写这篇文章的目的是因为前两天同学想应聘iOS开发,从网上找了iOS面试题和答案让我帮忙看看.我扫了一眼,倒吸了一口冷气,仔细一看,气的发 抖.整篇题目30多个没有一个答案是对的,总结这篇面试题的作者对iOS机制根本就是一知半解就敢发到网上,不管有心还是无心都是坑害新人.所以在这里总 结一下这几年面试别人和被别人面试遇到的一些我认为比较好的基础题目分享给大家,进阶题目在后续补充.我的理解如果有

李洪强IOS开发之-iOS经典面试题

李洪强IOS开发之-iOS经典面试题 写这篇文章的目的是因为前两天同学想应聘iOS开发,从网上找了iOS面试题和答案让我帮忙看看.我扫了一眼,倒吸了一口冷气,仔细一看,气的发抖.整篇题目30多个没有一个答案是对的,总结这篇面试题的作者对iOS机制根本就是一知半解就敢发到网上,不管有心还是无心都是坑害新人.所以在这里总结一下这几年面试别人和被别人面试遇到的一些我认为比较好的基础题目分享给大家,进阶题目在后续补充.我的理解如果有错漏请一定指出,非常感谢! 从12年开始做面试官到现在已经三个年头了,这

IOS面试题<转>

前言 写这篇文章的目的是因为前两天同学想应聘iOS开发,从网上找了iOS面试题和答案让我帮忙看看.我扫了一眼,倒吸了一口冷气,仔细一看,气的发抖.整篇题目30多个没有一个答案是对的,总结这篇面试题的作者对iOS机制根本就是一知半解就敢发到网上,不管有心还是无心都是坑害新人.所以在这里总结一下这几年面试别人和被别人面试遇到的一些我认为比较好的基础题目分享给大家,进阶题目在后续补充.我的理解如果有错漏请一定指出,非常感谢! 从12年开始做面试官到现在已经三个年头了,这期面过很多形形色色的开发,有腾讯

iOS经典面试题(转)

iOS经典面试题 前言 写这篇文章的目的是因为前两天同学想应聘iOS开发,从网上找了iOS面试题和答案让我帮忙看看.我扫了一眼,倒吸了一口冷气,仔细一看,气的发抖.整篇题目30多个没有一个答案是对的,总结这篇面试题的作者对iOS机制根本就是一知半解就敢发到网上,不管有心还是无心都是坑害新人.所以在这里总结一下这几年面试别人和被别人面试遇到的一些我认为比较好的基础题目分享给大家,进阶题目在后续补充.我的理解如果有错漏请一定指出,非常感谢! 从12年开始做面试官到现在已经三个年头了,这期面过很多形形

iOS 一些概念性面试题

1.类和对象的区别 类是对象的抽象,对象是类的具体实例. 类是抽象的,不占用内存,而对象是具体的,占有内存空间. 例如:类就是水果,对象就是苹果. 2.SSL握手流程 客户端向服务器发送 ClientHello 消息,说明它支持的最高TLS协议版本,随机数.密码算法列表及压缩方法. 服务器回复 ServerHello 消息,包含基于客户端 ClientHello 消息所选择的TLS协议版本,随机数.密码算法列表及压缩方法.服务器选择的协议版本为客户端和服务器都支持的最高版本. 当双方知道了连接参

OOP 面向对象编程

面向对象 对象的概念是面向对象技术的核心.在现实世界里,我们面对的所有事物都是对象,如计算机.电视机.自行车等.在面向对象的程序设计中,对象是一个由信息及对信息进行处理的描述所组成的整体,是对现实世界的抽象. 面向对象的三个主要特性: 对象的行为:可以对对象施加哪些操作:如电视机的开.关.转换频道等. 对象的状态:当施加那些方法时,对象如何响应:如电视机的外形.尺寸.颜色等: 对象的标识:如何区分具有相同行为与状态的不同对象. 基本概念: 对象,所谓数据封装就是将一组数据与这组数据有关操作组装在

iOS之面试题

之前看了很多面试题,感觉要不是不够就是过于冗余,于是我将网上的一些面试题进行了删减和重排,现在分享给大家. @property 后面可以有哪些修饰符? 线程安全的: (atomic,nonatomic )nonatomic 非原子操作,决定编译器生成的setter getter是否是原子操作,atomic表示多线程安全,一般使用nonatomic. 访问权限的 (readonly,readwrite)readwrite 是可读可写特性;需要生成getter方法和setter方法时; readon

iOS经典面试题(转)(转)

前言 写这篇文章的目的是因为前两天同学想应聘iOS开发,从网上找了iOS 面试题和答案让我帮忙看看.我扫了一眼,倒吸了一口冷气,仔细一看,气的发抖.整篇题目30多个没有一个答案是对的,总结这篇面试题的作者对iOS机制根本就是一知半解就敢发到网上,不管有心还是无心都是坑害新人.所以在这里总结一下这几年面试别人和被别人面试遇到的一些我认为比较好的基础题目分享给大家,进阶题目在后续补充.我的理解如果有错漏请一定指出,非常感谢! 从12年开始做面试官到现在已经三个年头了,这期面过很多形形色色的开发,有腾

简单工厂、多态工厂和抽象工厂设计模式的比较

工厂模式的主要作用就是封装对象的创建过程,使得程序员不必准确指定创建对象所需要的构造函数,这样做的一个好处就是增加了程序的可扩展性.由于每个面向对象应用程序的设计都需要创建对象,并且由于人们可能需要通过增加新的类型来扩展应用程序,工厂模式可能是最有用的设计模式之一. 总的来说,工厂模式主要分为三种类型:简单工厂模式.多态工厂模式.抽象工厂模式.这三种模式都属于设计模式中的创建行模式,他们多多少少在设计上有些相似之处,其最终的目的都是为了将对象的实例化部分取出来,进而优化系统的架构,增加程序的可扩