正常模式下的调试:
1.在VS中使用Console.White(或者WhiteLine)方法向控制台输出变量的值,通过这个我们可以查看变量的值是否符合我们的预期来调试错误。
2.在Unity中我们使用Debug.Log("")Debug.LogError("")Debug.LogWarn(""),向unity的Console窗口输出信息,帮助我们调试错误。
中断(Debug)模式下的调试:
如何让程序中断:断点
断点是什么:断点是源代码中自动进入中断模式的一个标记,当遇到断点的时候,程序会进入中断模式。
如何插入断点?
1.右击代码行,选择breakpoint(断点)->insert breakp(插入断点)
2.光标定位到代码行,选择菜单上的Debug(调试)->Toggle Breakpoint(切换断点)
3.光标定位到代码行,按下F9键,再次按下F9是取消断点
4.在需要添加新点的行首位置,直接单击,再次单击取消断点
单步执行代码:
在中断模式下我们可以单步执行代码,单步执行带有两种,逐过程和逐语句,这两个都是一条语句一条语句的执行,区别在于逐过程遇到函数不会进入函数内部,而把函数当成一条语句去执行。
异常处理(捕捉异常)try...catch...finally语句
catch块可以有1个或多个,finally可以有0个或一个
C#面向对象编程
面向对象编程就是结构化编程,对程序中的变量进行划分,让编程更清晰。
构造函数
在构造对象时,会自动初始化对象,而其他的东西则需要一些操作来完成,构造函数就是用于初始化数据的函数。
属性
属性(Property) 是类(class)、结构(structure)和接口(interface)的命名(named)成员。类或结构中的成员变量或方法称为 域(Field)。属性(Property)是域(Field)的扩展,且可使用相同的语法来访问。它们使用 访问器(accessors) 让私有域的值可被读写或操作。
程序内存区域:堆 栈 静态储存区
栈的空间比较小,但是读取速度快
堆的空间比较大,但是读取速度慢
栈的特征
数据只能从栈的顶端插入和删除,把数据放入栈顶叫入栈,从栈顶删除数据叫出栈,内存中的栈由系统管理。
堆的特征
堆是一块内存区域,堆里面的内存能够以任意顺序存入和移除。
虚方法
把一个基类函数声明为virtual,就可以在任何派生类中重写该函数,在派生类中重写另外一个函数时,要用override关键字显示声明。
修饰符
new 隐藏继承的成员
abstract 使用abstract修饰的类为抽象类,抽象类只能是其他类的基类,不能与sealed,static一起使用,抽象类不能被实例化。
sealed 使用sealed修饰的类为密封类,密封类无法被继承,不能与abstract,static一起使用,当sealed用于属性或方法时,必须始终与override一起使用。
static 使用static修饰的类为静态类,静态类所有成员都必须是静态的,不能与abstract. sealed一配使用。 使用static修饰的类为静态类,静态类所有成员都必须是静态的,不能与密封一起使用,静态类不能被实例化。
const 使用const关键字来声明某个常量字段或常量局部变量,必须在声明常量时赋值,不能与static一起使用,常量默认是static的,常量字段只有一个副本。
readonly 使用readonly关键字来声明只读字段,只读字段可以在声明或构造函数中初始化,每个类或结构的示例都有一个独立的副本,可以与static一起使用,声明静态只读字段。
virtual virtual关键字用于修饰方法、属性、索引器或事件声明,并使它们可以在派生类中被重写,默认情况下,方法是非虚拟的,不能重写非虚方法。
override 要扩展或修改继承的方法、属性、索引器或事件的抽象实现或虚实现,必须使用override修饰符,重写的对象必须是virtual、abstract、override的。
bilibili看的ciki老师教的