大家都知道面向对象的编程有封装、继承、多态三大特性,而我们在做一般的数据库项目的时候,感觉好少用到继承和多态的思想,本文将讲述,如何在一般的数据库管理系统上用上这些特性,使你的代码更具有面向对象的特性.
一、封装
封装的定义:
每个对象都包含了他能进行操作所需要的所有信息,因此对象不必依靠其他的对象来完成自己的操作,这样的特性叫封装。
封装在简单数据库项目中的例子:
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();
共同学习,写下你的评论
评论加载中...
作者其他优质文章