第五周 学习笔记

院会活动开始准备工作,学习间间断断,效果很不好。进度也有所拖慢。

面向对象

面向对象(OOP,Object-Oriented programming)不是取代面向过程的。OOA(面向对象设计)、OOD(面向对象架构)
代码从上往下执行,这就叫面向过程。面向过程处理比较麻烦时可以用面向对象。

类、对象。“人”是类,“张三”是“人”这个类的对象。类是抽象的,对象是具体的。按钮就是类,某个按钮就是对象。对象可以叫做类的实例(Instance)。类就像int,对象就像10。
比如唐中科不是人,是某个人。
类是对一些有共同地方的一堆东西的抽象表达。
在这里插入图片描述

比如上图,按钮们是一类,每一个是对象,他们有些差异。

字段Field(和某个对象相关的变量),字段就是类的状态(不同的对象可能不一样的状态就是字段)。人这个类有姓名、年龄、身高等字段。类不占内存,对象才占内存。字段描述对象特点的数据。眼睛的个数不能做为字段,因为所有人的眼睛个数都一样,没有差异性。

方法Method(函数),方法就是类能够执行的动作,比如问好、吃饭、立正稍细、一个人长高、减肥等。

类的继承,类之间可以有继承关系,比如“电脑”类可以从“电器”类继承,这样的好处是“电脑”类只需要定义自己特有的字段、方法就可以,也就是只要定义内存大小、CPU型号这些字段或者弹出光驱等方法就可以。父类(Parent)、基类(Base,基业,祖宗十八代传下来的)。电脑类是电器类的子类(ChildClass)。重用。父类有的子类都有。
Eg:描述人类的特征,你会说直立行走啥的,也不用描述人是有碳水化合物啊,基因啊啥的了,因为人是动物,所以动物的特征你并不需要描述了。

面向对象的三个特性:封装、继承、多态。一级比一级难。
定义类
lass person
{
}
在这里插入图片描述
就像定义一个枚举一样
在这里插入图片描述
如下,定义我这个 人类 的特比的状态,或者说是字段:
在这里插入图片描述
然后定义我这个类有哪些方法,比如说问好:
在这里插入图片描述
void sayhello() 类似定义函数的返回值 名字 参数
我也可以:
在这里插入图片描述
返回一个身高,就像一个函数。

注意:类的定义里面只能写字段的定义和方法的定义,不能直接写其他代码,这是个易错点。
在这里插入图片描述
也不能在绿色处写什么int i=i+5

但在赋值的时候可以写:
在这里插入图片描述
赋值代码会在对象创建的时候执行

//这也不是在声明变量,这是在声明字段。
在这里插入图片描述
//

class Program

 {
    static void Main(string[] args)
    {
        person p1 = new person();//创建出一个人类//定义person类变量p1,指向创建的person类的对象
        p1.gender = true;
        p1.height = 180;
        p1.name = "亚当";
        p1.sayhelllo();
        Console.ReadKey(); 
        
    }
}

//这里和在main中写string name =“ff”;bool gender;是不一样的,不是一行一行执行代码,这里是在声明类的字段。

// class person

{

    public string name;
    //这也不是在声明变量,这是在声明字段
    public bool gender;
    public int height;
    public void sayhelllo()
      {
    Console.WriteLine("你好啊");
      }

 }

一个小问题,了解即可↓
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

成员访问级别
字段、方法、属性(后面讲)都可以叫做类的成员Member,它们都需要定义访问级别。访问级别的用处在于控制成员在哪些地方可以被访问,这样达到面向对象中“封装”的目的。程序中不要“摄魂大法”,否则代码会非常乱。
几个访问级别:public(任何地方都可以访问);private(默认级别。只能由本类中的成员访问)。还有internal、protected两个级别。

注意:永远不要把字段public
字段一般都是private
字段开头小写?????

//调用者只能通过方法来请求对象改变他的状态,是否改变
//改变多少是类自己决定的。这是为什么字段不能public的原因???

在这里插入图片描述
对象的引用

Eg1:i1=3;i2=i1;i1++;//i2是3;
Eg2:p1=new Person();p1.i=3;p2=p1;p1.i++;//p2.i是4
int、decimal、bool、byte、enum等基础类型(值类型)是传递拷贝;对象(引用类型)则是传递引用。因为基础类型不怎么占内存,而对象则比较占内存;
函数间传递对象;
为对象变量重新赋值。p2=p1是让p2指向p1指向的对象;
在这里插入图片描述
在这里插入图片描述
P1=new persion ………………p2=new peision在这里插入图片描述
在这里插入图片描述
P2.heiight=190后,p1指向的对象也变成190。
从而显示:
190
190
在这里插入图片描述
在这里插入图片描述
改了p1和p2此时的共同指向对象为3000后,打印出:
190
190
3000

//函数间传递普通的类的对象也是引用传递
在这里插入图片描述
//P1不知向任何的对象,如果p1之前指向过对象,则切断p1和对象间的关系.
//p1=null后即他不在指向任何对象,所以无法修改“指向对象的height属性”,然后你让p1指向的对象变为60,那当然是报错了。
//编译的错误和运行的错误。
//以后如果碰到NullReferenceException,先看变量是不是指向了对象。

在这里插入图片描述
依然输出a,b
在这里插入图片描述
//除非用ref,才是真正把s1变量传进来,否则你这样依然是指向s1所指的值。
//Swapstring和dotit的区别Swapstring是想要修改变量的指向
//Dotit是修改变量指向的对象的状态。

猜你喜欢

转载自blog.csdn.net/TangibleCC/article/details/84892045
今日推荐