从今天开始学习面向对象:
1. 面向过程----面向对象:概念
1)面向过程:面向的是完成这件事的过程,强调的是完成这件事的动作
例: 把大象转进冰箱里 --> 1) 打开冰箱门 ; 2)把大象塞进去;3)关闭冰箱门。 ------- 思想: 没有强调冰箱和大象,只是强调3个过程
如果有以下情况:
张三:瘦小 矮 1)踩着板凳打开冰箱门; 2)找人帮忙把大象塞进去;3)踩着板凳关闭冰箱门
李四:强壮 高 1)自己打开冰箱门;2)自己把大象塞进去;3)自己关闭冰箱门
用面向过程的思想来解决此事,必须量身定做解决事情的方法。如果过程2增加一个步骤:清空冰箱
那张三和李四都需要重新写一个方法。
2)面向对象:找个对象帮你处理这件事
以上这件事,可以把冰箱作为对象:1)冰箱门可以被打开; 2)大象可以被塞进冰箱;3)冰箱门可以被关闭
面向对象的作用:屏蔽差异,写出通用的方法,不管谁来实现这个过程,只要调用此三个方法便可实现这三个过程
理解:描述某个事物的特征和行为---在代码将此事物作为对象,特征即为这个对象的属性,行为是这个对象的方法
特点:对象一定是看得见摸得着的,特指某一个。比如笔记本不是对象,我的笔记本才是对象。
我们把一些具有相同属性和方法的对象进行进一步封装,抽象出来了类这个概念.
类就是个模子,确定了对象应该具有的属性和方法。 类是对象的类型(与数据类型相似)
类是个抽象的,虚无的。比如:类就是一个盖大楼的图纸,对象就是盖出来的大楼
2. 类:
1)基本语法:
[public] class 类名
{
字段; //储存类的特征
属性;//保护字段,对字段的赋值和取值进行限定
方法;//描述类的行为
}
写好类之后,我们需要创建一个这个类的对象,这个创建对象的过程叫类的实例化,使用new
Person sunQuan = new Person();
我们在创建好一个类的对象后,需要给对象中的每一个属性赋值,这个过程叫做对象的初始化
this:表示这个类的对象
类是不占内存的,而对象是占内存的
2)属性:
作用:保护字段,对字段的赋值和取值进行限定
属性的本质就是两个方法:一个叫get{},一个叫set{}
int _age;
public int Age
{
get{return _age;} //当你输出属性的值得时候,首先会执行get方法
set{_age = value;} //当你给熟悉感赋值的时候,首先会执行set方法
}
限定字段_age的值可以在set前写:
int _age;
public int Age
{
get{return _age;} //当你输出属性的值得时候,首先会执行get方法
set
{
if(value<0||value>100)
{ value = 0; }
_age = value;
} //当你给熟悉感赋值的时候,首先会执行set方法
}
在get中限定字段_gender的值:
char _gender;
public char Gender
{
get
{
if(_gender != '男' && _gender != '女')
return _gender = '男';
return _gender;
} //当你输出属性的值得时候,首先会执行get方法
set{_gender = value;} //当你给熟悉感赋值的时候,首先会执行set方法
}
3. 静态类与非静态的区别:
非静态类:
1)既可以有实例成员(非静态),也可以有静态成员;
2)调用实例成员(非静态函数): 对象 .实例方法
调用静态方法: 类名. 方法
Person p = new Person();
p.M1(); //调用实例方法
Person.M2(); //调用静态方法
Console.ReadKey();
总结:静态成员必须使用类名去调用(静态字段也是一样),而实例成员是使用对象去调用
静态函数中,只能访问静态成员,不允许访问实例成员
实例函数中,既能访问静态成员,也能访问实例成员
静态类:
静态类中只允许有静态成员,不允许出现实例成员
静态类使用选择:
1)如果你想要你的类当做“工具类”去使用,这个时候可以考虑使用将类写成静态类
因为经常使用,可以省去“创建对象”的过程。直接使用类名去调用
2)静态类在整个项目中资源共享。(全局类) ,普通类是不占内存的,但是静态类会占内存,并且不可改变
内存中有三大区域: 堆 栈 静态储存区域
静态类就储存在静态储存区域当中
C#中的释放资源:GC 垃圾回收器会自动释放资源
释放资源区别:静态内存要在程序结束后才能回收内存,所以越少用越好!
4. 构造函数
作用:帮助并简化对象初始化(给每一个属性依次赋值) -----构造函数是可以有重载的(参数个数或类型不同)
构造函数的特殊之处:
1)构造函数没有返回值,连void也不能写
2)函数名必须与类名一模一样
3)创建对象的时候被调用.
Student zsStudent = new Student();
可以用参数来给对象中的属性依次赋值,这样初始化的时候就不用一个一个的给属性赋值
Student zsStudent = new Student("张三",18,'中',100,100,100);
***类会有一个默认的无参数的构造函数,当你写了一个新的构造函数,不管是有参数的还是无参数的
,那个默认的无参数的构造函数就被干掉了。
5.new
Student zsStudent = new Student();
new帮助我们做了三件事:
1)在内存中开辟一块空间
2)在开辟的空间中创建对象
3)调用对象的构造函数进行初始化(所以构造函数前必须是public)
6.this
作用:
1)代表当前类的对象
2)在类当中显示的调用本类的构造函数,语法: 冒号+this
比如:下面有一个:完整初始化构造函数:
public Student(string name,int age,char gender,int ch,int math,int english)
{
this.Name = name;
this.Age = age;
this.Gender = gender;
this.Chinese = ch;
this.Math = math;
this.English = english;
}
现在需要写一个:部分初始化的构造函数:
public Student(string name,int ch,int math,int english)
{
this.Name = name;
this.Chinese = ch;
this.Math = math;
this.English = english;
}
可以通过this来简化:
public Student(string name,int ch,int math,int english):this(name,0,' ',ch,math,english)
{ }
释放资源