错误(Bug):程序出问题导致无法运行(语法错误),逻辑方面有瑕疵(逻辑错误)
调试:使用Console.Write或(WiteLine)方法向控制台输出变量的值,通过调试可以查看变量的值是 否符合我们的预期来调试错误
中断模式:可以暂停程序的执行,查看程序中的状态,可以让程序继续执行
断点:进入中断模式的一个标记,当遇到断点时,程序会进入中断模式(F9进入断点)
异常处理:包含三个关键字 try...catch...finally 语句(捕捉异常)
try{
//可能出现异常的代码
}catch()//括号里面捕捉哪些异常可以有多个,如果没有括号可以捕捉任何异常
{
} finally{
//不管任何情况都会执行此代码
}
try:包含了可能出现异常的代码(一条或者多条语句)
catch:可以有0个、1个或者多个,如果没有catch块,必须有finally块,catch和finally可以同时存在
finally:包含了始终会执行的代码,不管有没有异常
面向对象(oop编程):每个模块提供特定的功能,每个项目是孤立的,对程序变量结构划分,
提供非常大的多样性,增加了代码的重用率
类:创建对象的模块,每个对象都包含数据,并提供了处理和访问数据的方法,类定义了每个对象(称为实例)可以包含数据和功能
类中的数据和函数称为类成员(数据成员和函数成员)
数据成员:包含类的数据--字段,常量和事件的成员
函数成员:提供了操作类中数据的某些功能(方法、属性、构造方法和终结器(析够方法),运算符和索引器)
新建类步骤:1: ——>2:
——>
3:——>4:
创建对象:类名 对象名=new 类名();(实例化对象)
构造函数: 对象的初始化过程是自动完成的,但是需要初始化数据的函数,构造函数就是用于初 始化的函数,声明基本的构造函数方法就是声明一个和所有在类同名方法,但是该方 法没有返回类型,与类名同名
实现构造方法的创建并初始化:
构造函数的参数问题: 在类里面参数名与形参名同名时使用this关键字,this指向的是参数名
属性:包含get和set(get得到,set获取)
匿名类型:var 数据名;
程序内存区域:堆、栈、静态存储区(程序所有数据都是在内存中)
栈的空间比较小,但是读取熟读块
堆的空间比较大,但读取速度慢
栈的特征:数据只能从栈的顶端插入和删除,把数据放入 栈顶 称为入栈(push),从栈顶删除数据称为出栈(pop)
图片:
内存中栈是由系统管理(.Net框架)
堆是一块内存区域,与栈不同,堆里的内存能够异任意顺序存入和移除,CLR的GC是内存管理机制也就是垃圾回收
值类型:(整数、bool、struct、char、小数)需要一段单独的内存,用于存储实际的数据(单独定义的时候放在栈中)
引用类型:(String、数组、自定义的类、内置的类) 需要两端内存:第一段 存储实际数据,它总是位于堆中,第二段 是一个引用(引用指的是内存地址),指向数据在堆中存放的位置
字符串常量放在静态存储区里面且字符串不能被修改
继承:一个类派生于一个基类型的所有成员和函数,该类拥有所有成员和函数
语法:类名:父类名
接口继承:表示继承了函数起那么,需要指定该类型具有某些可用的特性时,最好使用这种类型继承
多重继承:一个类派生了多个类,可以用于多重继承编写非常复杂但很紧凑的代码
this(base)作用:IDE提示和区分局部变量和字段
this:代表当前对象
base:代表访问父类
虚方法:把一个函数声明为 Virtual,就可以在任何派类中重写该类函数,在派生类中重写另一个函数时,要使用Override关键字显示声明,在子类里面重写虚函数之后不管在哪里调用都是重写之后的方法
隐藏方法:如果签明相同的方法在基类和派生类中都进行了声明,但是该方法没有分别声明为Virtual和Override派生类就会隐藏基类方法(要使用new关键字声明基类)
隐藏方法与虚方法区别:当通过父类去声明变量时,如果是虚方法她依然会调用重写的方法,但隐藏方法会调用父类方法
抽象类(abstract):允许把类和函数声明为abstract,抽象类不能实例化,可以包含普通函数和抽象函数(抽象函数只有定义没有函数体,抽象函数本身是虚拟的Virtual只有函数定义,没有函数体实现)
密封类:类前加sealed
密封方法:方法前加sealed
sealed:对于类不能继承该类,对于方法表示不能重写方法
派生类子类的构造函数(无参):先调用父类的,然后是子类的,base()可以直接不写,因为会默认调用父类中的构造函数且调用有参的构造函数
修饰符:用来修饰类型或者成员的关键字,可以指定方法的可见性
public(公有的):都可以访问该类型成员
protected(保护的):只有同一类或此类的派生类中的代码才可以访问该类型成员
private(私有的):只有同一类或结构中的代码才可以访问(只能在类模块内部访问)
internal:同一程序集中的任何代码都可以访问该类型或成员但是代码不可以
protected internal:在一程序集中体现的是internal的性质,在其他程序集中体现的是protected的性质
static:使用static修饰的类微静态类,所有成员必须是静态的,不能与abstract、sealed一起使用