大家都知道面向对象的编程有封装、继承、多态三大特性,而我们在做一般的数据库项目的时候,感觉好少用到继承和多态的思想,本文将讲述,如何在一般的数据库管理系统上用上这些特性,使你的代码更具有面向对象的特性.
一、封装
封装的定义:
每个对象都包含了他能进行操作所需要的所有信息,因此对象不必依靠其他的对象来完成自己的操作,这样的特性叫封装。
封装在简单数据库项目中的例子:
public class Class1 { private string myConStr; public Class1() { } public string MyConStr { get { return myConStr; } set { myConStr = value; } } public virtual void dboperate() { } }
上面就是一个封装好了的简单的类
二、继承
继承代表了一种“is-a”的关系,个人觉的继承的最大好处是少些好多的代码及多态功能
例子:
public class Class2 : Class1 { private SqlConnection myCon; private SqlCommand myCom; private SqlDataReader myReader; public Class2(string str):base() { base.MyConStr = str; } public override void dboperate() { myCon = new SqlConnection(base.MyConStr); myCon.Open(); myCom = new SqlCommand("insert into table1(NO,NAME,SEX) VALUES('001','BIIL','MAN')", myCon); myReader = myCom.ExecuteNonQuery(); } }
这里用重载的方法少写了从父类继承过来的代码。
三、多态
定义:是允许将父对象设置成为和一个和多个它的子对象相等的技术,比如Parent=Child 赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。也就是说,父亲的行为像儿子,而不是儿子的行为像父亲。
在定义一个跟新数据库的类:
public class Class3:Class1 { private SqlConnection myCon; private SqlCommand myCom; public Class3(string str):base() { base.MyConStr = str; } public override void dboperate() { myCon = new SqlConnection(base.MyConStr); myCon.Open(); myCom = new SqlCommand("update table1 set SEX='WOMAN'where ID='001'", myCon); myCom.ExecuteNonQuery(); } }
多态的实现:
string connstring = "Data Source=tty1;Initial Catalog=Northwind;Integrated Security=True"; Class1 pclass1 = new Class2(connstring);//Parent=Child Class1 pclass2 = new Class3(connstring);//Parent=Child pclass1.dboperate();//执行Class2的dboperate()方法 pclass2.dboperate();//执行Class3的dboperate()方法
四、结尾:
到现在我们已经实现了数据操作的面向对象的三大特性,但是,从上面的例子却不敢恭维,从继承的角度来看,并不成功,可以考虑将 SqlConnection myCon, SqlCommand myCom放在父类中,修改之后的代码如下:
//父类Class1 public class Class1 { private string myConStr; protected SqlConnection myCon; protected SqlCommand myCom; public Class1() { } public string MyConStr { get { return myConStr; } set { myConStr = value; } } public virtual void dboperate() { } } //子类Class2 public class Class2 : Class1 { public Class2(string str):base() { base.MyConStr = str; } public override void dboperate() { myCon = new SqlConnection(base.MyConStr); myCon.Open(); myCom = new SqlCommand("insert into table1(NO,NAME,SEX) VALUES('001','BIIL','MAN')", myCon); myCom.ExecuteNonQuery(); } } //子类Class3 public class Class3:Class1 { public Class3(string str):base() { base.MyConStr = str; } public override void dboperate() { myCon = new SqlConnection(base.MyConStr); myCon.Open(); myCom = new SqlCommand("update table1 set SEX='WOMAN'where ID='001'", myCon); myCom.ExecuteNonQuery(); } } //操作 string connstring = "Data Source=tty1;Initial Catalog=Northwind;Integrated Security=True"; Class1 pclass1 = new Class2(connstring); Class1 pclass2 = new Class3(connstring); pclass1.dboperate(); pclass2.dboperate();
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦