C#学习第七天 面向对象、类、对象的概念

从今天开始学习面向对象:

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)
		{ }


7.析构函数

释放资源


















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值