面向对象
1、面向过程------>面向对象
面向对象是由面过程演变而来
面向过程:面向的是完成这件事的过程,强调的是完成这件事的动作
举例:把大象塞进冰箱里
1、打开冰箱门
2、把大象塞进去
3、关闭冰箱门
孙全 瘦小 矮
孙全需要踩着小板凳打开冰箱门
孙全找翟盼盼帮忙把大象塞进冰箱里
孙全踩着板凳关闭冰箱门
翟盼盼 190cm 力气非常大
翟自己就能打开冰箱门
翟自己将大象塞进冰箱里
翟自己关闭冰箱门
总结:如果我们用面向过程的思想来解决这件事,当执行这件事的人
不同的时候我们需要为每不同的人量身定做解决这件事的方法。
面向对象:就是找个对象帮你做事。
例如:
把大象塞进冰箱里
冰箱门可以被打开
大象可以被塞进冰箱
冰箱门可以被关闭
以上为面向对象的方法,忽略任何人的存在(不需要考虑任何条件),任何人都可以调用这个方法来完成这件事。
面向对象:意在写出一个通用的代码,屏蔽差异。
我们在代码中描述一个对象,通过描述这个对象的属性和方法,对象必须是看的见摸的着的,不能有范围性的,必须是指定的实物。
例如:
1、灯:属性和方法
属性:
外形:长的
亮度:500W
颜色:白的
品牌:XXXXX
方法:发光(动词)
2、电风扇
属性:
外形:三个扇叶
颜色:白色
品牌:钻石
方法:转动,扇风
对象的共性:
我们把这些具有相同属性和相同方法的对象进行进一步的封装,抽象出来,类这个概念。
类是模子,确定对象将会拥有的特征(属性)和行为(方法)
对象是根据类创建出来的。
举例:好比说类就是一座盖大楼的图纸,实实在在的楼房就是根据这个图纸盖出来的,这个楼房就是这个图纸的对象。
因为可以拿这个图纸盖很多这种楼房。先有图纸才有的楼房(根据图纸建楼房)
例如:
类:人类(包含:共性的属性:姓名,性别,身高,年龄.......。共性的方法:吃,喝,拉,撒,睡........)
人类下的对象:孙全,张三,李四,赵五......
clss类下有三个种:
1、字段:命名前加下划线 首字母必须小写,字段作为开辟空间存储数据的作用 字段只能在当前类下使用,出了这个类就访问不到了,字段不可直接赋值,是由属性接收判定后再由属性赋值给字段
2、属性:命名前不加下划线 首字母必须大写,属性的作用是限定字段赋值范围 属性作为接收后判定是否在限定范围内,然后再将正确的值赋值给字段,接收时必须是先new一个对象,再由对象.属性赋值;
属性中有两个方法
1、get{return _字段命名;}//获取****可以在此方法中判定对象赋值是否在范围内,但是必须在[return _字段命名;] 之前判定。
2、set{_字段命名=value;}//设置*****也可以在此方法中判定对象赋值是否在范围内,但是也必须在[_字段命名=value;]之前判定。
3、方法:命名前不加下划线 字母全大写 可将字段中的数据输出。
属性:
属性的作用就是保护字段、对字段的赋值与取值进行限定。
属性的本质就是两个方法,一个叫get(),另一个叫set()。
属性中有以下三种情况:
1、既有get(),也有set()我们称之为可读可写属性。
2、只有get(),没有set()我们称之为只读属性。
3、没有get(),只有set()我们称之为只写属性。
举例:
写一个类******这个类必须新建类,不可与Main函数上面的类写在一起******
clss Person(类名)(首字母大写其他单词首字母也大写)
{
//private 表示私有的。只能在当前类的内部进行访问,出了这个类就访问不到了。
//public 表示公开的,公共的。
private string _name;//字段---首字母必须小写,且前面必须加下划线(姓名)****此项为字段作为开辟空间存储数据的作用****
public string Name//属性---首字母必须大写,且前面不需要加下划线****此项为属性,属性的作用是限定字段赋值范围的*****
{
get{return _name;}//获取姓名---返回字段获取的姓名
set{_name=value;}//设置姓名---属性将姓名赋值给字段
}
private int _age;//(年龄)
public int Age//可以在get里面判定,也可以set里面判定。
{
get{
if(_age>100||_age<0)
\ {
return _age=0;
}
return _age;}
set{_age=value;}
}
private cher _gender;//(性别)
//判定方法 一
get{
if(_gender!='男'&&_gender!='女')
{
return _gender='男';
}
return _gender;
}
set{_gender=value;}
//判定方法 二
get{return _gender;}
set{
if(value!='男'&&value!='女')
{
value='男';
}
_gender=value;
}//get
public static void CHLSS()
{
Console.WriteLine("我是{0},我今年{1}岁,我是{2}生,我可以吃喝拉撒睡哟~~~~~!",this.Name,this.Age,this.Gender);
] }//CHLSS
}//clss
static void Main(string[] args)
{
Person zhangSan=new Person();//新建一个对象为:zhangSan
zhangSan.Name="张三";//赋值给属性必须是用:[对象名]+[.]+[属性的命名]+[赋值运算符"="]+值(注意属性是什么类型,值就只能是什么类型,字符串用“”,字符用‘’,金钱类型值后面必须加“m”这个字母不分大小写。)
zhangSan.Age=23;
zhangSan.Gender='男';
zhangSan.CHLLS();//使用类下的方法必须用[对象]加[.]再加[方法名]以分号结束
Console.ReadKey();
}
5、当我们创建好一个类的对象后,需要给这个对象的每个属性去赋值,我们将这个过程称之为对象的初始化。
6、静态和非静态的区别
1)、在非静态类中,既可以有实例成员,也可以有静态成员。
2)、在调用实例成员的时候,需要使用对象名,实例成员;
静态与非静态调用的区别
1)、在调用静态成员的时候,需要使用类名,静态成员名
2)、在调用非静态成员的时候,需要对象来调用非静态成员。
总结:静态成员必须使用类名去调用,而实例成员使用对象名调用。
静态函数中,只能访问静态成员,不允许访问实例成员。
实例函数中,既可以使用静态成员,也可以使用实例成员。
静态类中允许有静态成员,不允许出现实例成员(非静态成员)
使用:
1)、如果你想要你的类当做一个“工具类”去使用,这个时候可以考虑将类写成静态的
2)、静态类在整个项目中资源共享。
只有在程序全部结束之后,静态类才会释放资源。
堆 栈 静态存储区域
释放资源,GC Garbage collection垃圾回收器。
C# 面向对象 字段 方法 属性
最新推荐文章于 2023-03-06 00:53:46 发布