面向对象编程OOP(Object-Oriented Programming)
类和对象
类是对象的定义,对象是类的实现。
[属性集信息] [类修饰符] class 类名 [:类基] //定义类的语法格式,方括号可省略,类修饰符默认为public,隐含基类默认为object
{类成员}
属性集信息:c#语言提供给程序员的为程序中的各种实体附加一些说明
部分类修饰符:private:只能这个类的成员访问
protected:只能被本类及本类的子类(派生类)访问
internal:在本程序集中可访问。
public:完全可访问。
abstract:抽象类,含有抽象成员,不能被实例化,只能做基类。
sealed:密封类,不能再派生出其他类。
类基:定义该类的直接基类和由该类实现的接口。
类成员:由两部分组成,一部分是以类成员声明形式引入的类成员,另一部分是直接从它基类继承而来的成员。
类成员声明主要包括常数声明,字段声明,方法声明,属性声明,事件声明,构造函数声明,析构函数声明等。
当字段,方法,属性,事件,运算符,和构造声明中含有static修饰符时,表明是静态成员,不能实例化。
部分类成员访问修饰符:private/protected/internal/public 同上
常数声明:常数表达式的值应该是一个可以在编译时计算的值,不允许使用static修饰符,但他和静态成员一样,只能通过类访问。
[属性集信息] [常数修饰符] const 类性 标识符 = 常数表达式[] //方括号可省略,类修饰符默认为public,隐含基类默认为object
字段声明:变量声明列表可以用逗号来分隔多个变量,并且变量标识符还可以用赋值号设定初始值。字段其实就是声明一个变量。
可用readonly修饰符,表示只读字段。只读字段可以在定义时或构造函数时赋值,它的值不能在编译时确定,只能在运行时确定。常量只能在定义时赋值,常量值在编译时已经确定,在程序中不能确定。
[属性集信息] [常数修饰符] 类性 变量声明列表 //方括号可省略,字段的默认修饰符为private,
构造函数和析构函数:是类中比较特殊的两种类,分别用来对对象进行性初始化和回收对象资源。
不写构造函数,默认有一个没有参数的构造函数。
如果一个类含有构造函数,在实例化该类的对象时就会调用,如果含有析构函数则会在销毁对象时调用。
构造函数的名字与类名相同,析构函数的名字与构造函数形同,析构函数名字前面要加一个波浪号。
构造函数:无返回值,连void都不需要,方法名必须是类名,如无构造函数则系统默认一个无参构造函数,可定义多个构造函数(重载:参数类型不同,个数不同,顺序不同),静态属性与静态构造函数(静态构造函数的执行是系统进行控制的)
public 类名(){}
属性:属性的主要用途是限制外部类对类中成员的访问权限,定义在类级别上。
属性不存数据。
属性可以忽略get或set访问器,但是不能两个都忽略。
get方法没有参数;set方法有一个隐含的参数value。
[属性集信息] [常数修饰符] 类性 属性名
{
get{}
set{}
}
面向对象的三个主要特征:封装、继承、多态。
封装具体的表现是类,类是将具有相同特征的事物封装在一起,
存储的是一类事物的属性及方法;对象是类的具体实现,
表示的是一个具体的事物;
属性和方法;但是每个对象的属性值和方法执行的结果都是不一样的(静态属性及静态方法除外);
方法的默认修饰符是internal;*类默认修饰符为internal(只能是public或internal);
一个栗子:
类:所有的桌子
对象:一个桌子
属性:桌子的款式,桌子的高度,桌子材质
方法:放书,当材火烧,可以伸缩大小
封装:定义了桌子类,有材质这个属性,把(逻辑处理)封装起来,只留接口访问。
这个桌子,该暴露什么,不该暴露什么,由类的设计中觉得,private属性用户不能直接访问,如果提供了接口访问材质这个属性,那么可以修改这个属性的值
通过方法修改属性和直接修改属性的区别:是方法修改属性可以做限制,如果不良商人用垃圾木头做桌子呢。那么这个方法就可以做限制。
继承:一个对象(桌子),有某个方法(伸缩),另一个对象(桌子)刚好没有,最简单的就是另外一个继承这个伸缩方法
多态:一个对象(桌子),每个桌子都有相同的方法(放东西),但有的放电脑,有的放书。这就是多态
果然现在回头来看还是不太懂,太难理解,还要继续去思考。
坑先填这么多,剩一部分回来再填。
16.12.16 ps:给大家推荐一个视频教程 http://study.163.com/course/courseMain.htm?courseId=214019 传智博客的一个讲解面向对象的视频,
讲解浅显易懂,课时还少,一下午就可以看完。大家可以去看一看,先理解个大概就能看明白了。
转载请联系