----------------------ASP.Net+Android+IOS开发、.Net培训、期待与您交流! --------------------------
C#中面向对象的三大基本特征:封装 继承 多态。
一. 封装
1.封装的概念
在C#中面向对象的封装就是将事物的状态和行为封装在类中,使用类的人不需要知道类的内部是怎么实现的,只需要知道类的统一接口(属性名和方法名)就行,而且只要通过接口来实现功能就行。
例如1:现在的智能手机,你只需要触摸电话按键电话就能打通,你只需触摸短信按键就能发送短信了,也就是你只需要触摸各种按键就能打电话,发短信或者玩游戏等,而我们使用手机的用户根本就不需要知道它们内部到底是怎么实现的(我们只需要每个按键是什么功能就行)。所以面向对象的封装也就像智能手机一样,手机里所有功能的具体的实现过程都集成到手机内部的芯片上,开发手机的人只需要对外提供统一的接口(什么按键是什么功能)就行,这样方便用户使用。
例如2:上面一个例子是从非程序的角度来分析封装到底是怎么样的,现在这个例子从编程的角度来分析封装是什么样的
如果我们想把一个int类型的对象转换成string类型,我们只需调用.Net Framework类库里面现成的类里面的方法就可以:
int m=13;
string n=m.ToString();
即 .Net Framework类库里面所有的类都是已经封装好了的,我们只需要知道类有什么功能就行,这样需要用的时候直接调用就行。
再比如写控制台程序大家用的最多的就是向控制台输出结果,我们只需要调用.Net Framework类库里面的Console.WriteLine("输出的结果")方法就能实现
ASP.NET中的控件也是一种封装的体现。
2.封装在程序中的体现和作用
在C#中封装用的还是很普遍的,下面罗列几个常见的封装:
A.用属性封装字段:
class Person
{
private int age;//定义一个私有字段
public int Age//用Age属性封装age这个私有字段
{
get { return age; }
set {
if (value >= 0)
age = value;
else
age = 0;
}
}
}在上面的Person类中用一个Age属性对私有字段进行封装,当外界需要对类中的私有字段存取值时只要通过调用Age这个属性就行,我们不需要知道属性内部是什么来存取字段值的,在控制台Main()方法中就可以这样实现:
Person ps=new Person();
ps.Age=100; //赋值
Console.WriteLine(ps.Age);//输出age值
B.方法的多个参数封装成一个对象(项目中经常用):
public class Information
{
public void ShowInfo(string name,int age,double salary)
{
Console.WriteLine("name:{0},age:{1},salary:{2}",name,age,salary);
}
public void ShowInfoChange(Person obj)
{
Console.WriteLine("name:{0},age:{1},salary:{2}",obj.Name,obj.Age,obj.Salary);
}
}
然后在控制台中Main()方法中调用这个类的ShouInfo方法:
Information info=new Information();
info.ShouInfo("yzk",18,100000000);这样就能在控制台中得到结果。
那么如何将ShowInfo方法中的name,age,salary这三个参数转换成一个参数来进行传递,达到ShowInfoChange方法的效果,使得程序看起来很清晰而且简便?
其实就要用到封装的思想了,将三个参数封装成一个对象,这样传递的时候只需要一个对象参数即可。实现过程;
先是写一个Person类来封装三个参数
public class Person
{
public string Name //Name属性
{
get;
set;
}
public int Age//Age属性
{
get;
set;
}
public double Salary//Salary属性
{
get;
set;
}
}
封装完之后再将我们可以在控制台Main()方法中这样写:
Information info=new Information();
Person ps=new Person();//实例化刚刚写的那个person类
ps.Name="yzk";ps.Age=18;ps.Salary=100000000
info.ShouInfoChange(ps);这样就能在控制台中得到结果就和之前的一样。
有时候大家在写程序的时候发现有一堆代码写了不下于一遍,碰到这样的情况我们可以将这堆代码中不变的封装到一个方法中,变化的以参数进行传递,然后每次需要用的时候只需要调用这个方法就行,这样就能达到代码重用的效果,简便开发过程。
例如:数据库访问组件SqlHelper类就用到这种封装思想
大家刚开始写数据库访问代码时就会发现,每次要访问数据库时我们都要重复的去写那些数据库连接(SqlConnection),SqlCommand,SqlDataReader等等,其实这些代码碰到任何一种情况都是不变的,变化的只是sql语句 存储过程等一些东西,这样我们就可以将这些不变的封装到方法中,变化的作为方法参数进行传递!SqlHelper类就是用到了这种封装的思想。
注意:其实封装的思想体现的地方很多,比如还有就是将一些功能封装到一个类中,将一些具有相同功能的代码封装到一个程序集中(dll,exe)中,希望这些能够帮助到你们。