面向对象编程三大特性
封装性:如何设计一个类
广义封装: 从整个项目的设计角度出发
狭义封装:通过访问修饰符控制类中成员的访问权限
如何实现狭义封裝?
类包含:类中的字段-特征 类中的方法-行为
类中的字段私有化,类中的方法公开化
实现方式:一般,类中包含的成员有两部分:
一是类中的字段,二是类中的方法
类中的字段私有化private,类中的方法公开化public
继承性:多个类出现相同内容时,要提取父类。子父类
多态性:对象多个选择
一、封装性
访问修饰符:
public-公有
private-私有,只限于本类成员内访问,子类、实例都不能访问
protected-保护,只限于本类内部和子类内部可访问,实例不能访问
internal-内部,限于本项目(相当于项目里的public)
private-创建一个类之后, 类中添加了字段和方法
protected internal-内部保护,=protected+internal
注:如果字段或方法省略了访问修饰符,那么省略的其实是private
也就是说:字段和方法的默认权限是private
protected类型解释:
若被引用的程序集中有子类A:B,那A中public类型的属性、方法和B中public类型的属性、方法都既可以通过A的实例或类名来调用,又可以在A内部直接使用,但A、B中protected类型的属性、方法只能在A内部直接使用,不能通过A的实例或类名来调用;
若引用程序集的一方C继承了A,那A、B、C中public类型的属性、方法都既可以通过C的实例或类名来调用,又可以在C内部直接使用,但A、B、C中protected类型的属性和方法只能在C内部直接使用,不能通过的实例或类名来调用。
默认访问修饰符
命名空间内部的(class、struct、abstract class、interface、delegate、enum)的访问修饰符默认都是internal
可以人为改成public类型,不能改成protected、protected internal、private类型
类class前面省略的也是 internal
属性语法:
public 返回值类型 属性名
{
get {return 字段名;}
set {字段名=value;}
注: 1.属性名和字段名是对应的,只是属性名应该首字母大写;
2.一个属性中对应两个方法: get | set
通过get访问字段的值,通过set设置字段的值
3.如何利用属性访问或设置值?
对象名.属性名=值; //设置值 对象名.属性名;//访问值
- 将具体值设置到字段上时,有一个隐含的变量value是先将具体值交给value变量,再由value变量给字段。value的类型会与当前操作的字段匹配。
- 总结:字段私有化,方法公开化个私有化字段对应一个标准属性(包含两个方法(get|set)
如何实现封装----属性
标准属性
1)特点 4)标准属性可设置只读操作,只写操作
2)属性的两个方法 3)属性中的set,对数据进行业务逻辑处理
只读:只能访间字段的值,而不能为字段设置值
只写:只能为字段设置值,设置完值,是不能访问的。
当然,可以设置只读或只写权限,也可以设置既可读也可写
创建-一个Student类
类中包含两个字段:
学生姓名----name 字段,标准的属性Name
学生学号----自动属性No
标准属性和自动属性
1.自动属性是prop,按两次Tab不需要再自己定义私有字段,系统会在自动属性中自动添加一个对应的私有字段
2.何时使用自动属性?----编码中,一般都是使用标准属性。
但是,如果-一个类中有大量的字段(如: 50个)但是对字段设置值或访问值时,只是做最简单的设置和访问而不需要对数据进行任何的处理(比如:数据是否合法)这表明,使用属性进行了封装,符合类的设计规则。
自动属性get和set必须成对出现,在自动属性中,不能再设置只读或只写一种权限;自动属性中不能在set中添加业务代码对字段的值进行相应判断的操作。
其中有两段借用了 changuncle 大佬的的内容
C#面向对象三大特性_xiaouncle的博客-CSDN博客_c#面向对象
现在接触的案例太少还看不太懂,不过感觉大佬总结的非常好,希望日后复习的时候都能弄明白~