一、封装
封装,即隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别;将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成“类”,其中数据和函数都是类的成员。
封装的目的是增强安全性和简化编程,使用者不必了解具体的实现细节,而只是要通过外部借口,以特定的访问权限来使用类的成员。
public class 类名 { //成员变量 private 数据类型 _属性名; //属性 public 数据类型 属性名; { get{return _属性名;} set{_属性名 = value;} } public 数据类型 属性名2; { get{return _属性名 + "字符串";} } //成员方法 public 函数名(变量1,变量2) { 函数体 } }
这就是一个典型的封装,包括三部分:成员变量,属性,成员方法。
成员变量是类的基本属性。
属性是对成员变量的保护,对成员变量的属性值设置与修改进行过滤。
一个成员变量可以有多个属性。多个属性可以对成员变量的属性值进行不同类的输出和设置。只设置get是只读属性。
成员方法是一种函数,
可以对类内的数据进行处理,并返回值。
二、访问修饰符
访问修饰符是对类,属性,方法的公开等级进行分类的等级制度。
1、public - 公开的, 只要引用了命名空间就能用。 访问要求最低。
2、private - 私有的,访问仅限于包含该成员的类。 访问要求最高。
3、internal - 默认的,访问仅限于当前命名空间。 访问要求次低。
4、protected - 被保护的,类的内部及其子类可以访问。 访问要求次高。
三、命名空间(namespace) /程序集
命名空间是对各种代码的一种管理方式,用于组织和重用代码。
由于词汇量的限制,数据和函数的命名会出现不可避免的重复,命名空间则对此做出了限制:只有在命名空间内,该名称唯一,这样就防止了冲突。
using关键词,用于表明程序使用的是给定命名空间中的名称。
比如using System;表明使用了System命名空间,这个空间定义了Console,那么就可以直接调用Console。
自定义命名空间时,如果在文件夹内创建,命名空间名字会变成 “文件夹名.文件名”。这个名字可以随意修改,去掉文件夹名也可以。
在调用命名空间时,和当前命名空间处于同一文件夹下时可以直接调用,如果不在,比如在同一文件夹下的另一个文件夹里,那么可以用 “ using 命名空间名字; ”调用。
四、静态类
public static class math { public static decimal sum(decimal a,decimal b) { return a+b; } }
static - 静态的,将类定义为一个静态类,里面的数据一般都是静态的,也可以包含普通数据和方法,但一般建立静态类时只用静态数据和方法。
普通类不可包含静态数据和方法。
静态类不需要实例化,可以通过 类名.属性 直接 引用。
五、构造函数
构造函数 ,是一种特殊的方法。主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。特别的一个类可以有多个构造函数 ,可根据其参数个数的不同或参数类型的不同来区分它们 即构造函数的重载。
构造函数在类中是默认隐藏的,也可以写出来。
public class 类名 { //构造函数 public 类名() { //设置默认值 _属性名 = 默认属性值; } //成员变量 private 数据类型 _属性名; //属性 public 数据类型 属性名; { get{return _属性名;} set{_属性名 = value;} } //成员方法 public 函数名(变量1,变量2) { 函数体 } }
构造函数的名字必须和类名一样。
实例化就是引用构造函数的过程。
可以在构造函数内给属性设定默认值。