版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、教育部普通高等教育十二五国家级规划教材教育部普通高等教育十二五国家级规划教材C#程序设计及应用教程程序设计及应用教程第第3版版(包括简化版:(包括简化版:C#程序设计教程程序设计教程第第3版)版)第第3章章 类和结构类和结构2Ch3 类和结构类和结构3.1 自定义类自定义类(class)和结构和结构(struct)3.2 属性和方法属性和方法3.3 类的继承与多态性类的继承与多态性3.4 常用结构和类的用法常用结构和类的用法3.1 自定义类自定义类(class)和结构和结构(struct)l3.1.1 类的定义和成员组织类的定义和成员组织l3.1.2 访问修饰符访问修饰符l3.1.3 静态成员
2、和实例成员静态成员和实例成员l3.1.4 构造函数和析构函数构造函数和析构函数l3.1.5 字段和局部变量字段和局部变量l3.1.6 结构的定义和成员组织结构的定义和成员组织343.1.1 类的定义和成员组织类的定义和成员组织类类:定义对象具有的特征(字段、属性等)和可执行的操作(方定义对象具有的特征(字段、属性等)和可执行的操作(方法、事件等)。法、事件等)。 自定义类的常用形式自定义类的常用形式: 访问修饰符访问修饰符 static class 类名类名 : 基类基类 ,接口序列,接口序列 类成员类成员 类成员类成员:包括字段、属性、构造函数、方法、事件、运算符、索包括字段、属性、构造函数
3、、方法、事件、运算符、索引器、析构函数等。引器、析构函数等。53.1.2 访问修饰符访问修饰符类和类的成员都可以使用下面的访问修饰符。类和类的成员都可以使用下面的访问修饰符。lpublic:类的内部和外部代码都可以访问。:类的内部和外部代码都可以访问。lprivate:类的内部可访问,类的外部无法访问。如果省略类成员的:类的内部可访问,类的外部无法访问。如果省略类成员的访问修饰符,默认为访问修饰符,默认为private。linternal:同一个程序集中的代码都可以访问,程序集外的其他代码:同一个程序集中的代码都可以访问,程序集外的其他代码无法访问。如果省略类的访问修饰符,默认为无法访问。如果
4、省略类的访问修饰符,默认为internal。lprotected:类的内部或者从该类继承的子类可以访问。:类的内部或者从该类继承的子类可以访问。lprotected internal:从该类继承的子类或者从另一个程序集中继承:从该类继承的子类或者从另一个程序集中继承的类都可以访问。的类都可以访问。6partial修饰符修饰符:包含包含partial修饰符的类称为分部类。修饰符的类称为分部类。l可将类的定义分布在多个文件中,编译器编译带有可将类的定义分布在多个文件中,编译器编译带有partial修饰符的修饰符的类时,会自动将这些文件合并在一起。类时,会自动将这些文件合并在一起。l可可隔离自动生成
5、的代码和人工书写的代码隔离自动生成的代码和人工书写的代码。【例例3-1】 演示如何声明类、字段、构造函数和方法,同时说明如何实例化演示如何声明类、字段、构造函数和方法,同时说明如何实例化对象、如何使用分部类以及如何输出实例数据。对象、如何使用分部类以及如何输出实例数据。3.1.2 访问修饰符访问修饰符73.1.3 静态成员和实例成员静态成员和实例成员通过类名调用静态成员,通过类名调用静态成员,通过通过实例名调用实例成员。实例名调用实例成员。1. static关键字关键字l表示类或成员加载到内存中只有一份,而不是有多个实例。当垃圾回收器表示类或成员加载到内存中只有一份,而不是有多个实例。当垃圾回
6、收器检测到不再使用该静态成员时,会自动释放其占用的内存。检测到不再使用该静态成员时,会自动释放其占用的内存。l可用于类、字段、方法、属性、运算符、事件和构造函数,但不能用于索可用于类、字段、方法、属性、运算符、事件和构造函数,但不能用于索引器、析构函数或者类以外的类型。引器、析构函数或者类以外的类型。l静态字段有两个常见的用法:一是记录已实例化对象的个数,二是存储必静态字段有两个常见的用法:一是记录已实例化对象的个数,二是存储必须在所有实例之间共享的值。须在所有实例之间共享的值。l静态方法可以被重载但不能被重写,因为它们属于类,而不属于类的任何静态方法可以被重载但不能被重写,因为它们属于类,而
7、不属于类的任何实例。实例。83.1.3 静态成员和实例成员静态成员和实例成员2. 静态类静态类声明自定义类时如果加上声明自定义类时如果加上static关键字,则该类就是静态类。关键字,则该类就是静态类。静态类的主要特点:静态类的主要特点:l仅包含静态成员。仅包含静态成员。l无法实例化。这与在非静态类中定义私有构造函数可阻止类被实例无法实例化。这与在非静态类中定义私有构造函数可阻止类被实例化的机制相似。化的机制相似。l是密封的,因此不能被继承。是密封的,因此不能被继承。l不能包含实例构造函数,但可以包含静态构造函数。如果非静态类不能包含实例构造函数,但可以包含静态构造函数。如果非静态类包含需要进
8、行重要的初始化的静态成员,也应定义静态构造函数。包含需要进行重要的初始化的静态成员,也应定义静态构造函数。93.1.4 构造函数和析构函数构造函数和析构函数l构造函数构造函数:是创建对象时自动调用的函数。一般在构造函数中做一是创建对象时自动调用的函数。一般在构造函数中做一些初始化工作,或者做一些仅需执行一次的特定操作。些初始化工作,或者做一些仅需执行一次的特定操作。l构造函数没有返回类型,并且它的名称与其所属的类的名称相同。构造函数没有返回类型,并且它的名称与其所属的类的名称相同。lC#支持两种构造函数:实例构造函数和静态构造函数。支持两种构造函数:实例构造函数和静态构造函数。1. 实例构造函
9、数实例构造函数每创建一个对象,都会先通过每创建一个对象,都会先通过new关键字指明调用的构造函数,这种关键字指明调用的构造函数,这种构造函数称为实例构造函数。例如:构造函数称为实例构造函数。例如: Child child = new Child();这条语句的这条语句的Child()就是被调用的实例构造函数。就是被调用的实例构造函数。103.1.4 构造函数和析构函数构造函数和析构函数2. 静态静态构造函数构造函数如果构造函数声明包含如果构造函数声明包含static修饰符,则为静态构造函数,否则为实例构造函修饰符,则为静态构造函数,否则为实例构造函数。数。创建第一个实例或引用任何静态成员之前,
10、创建第一个实例或引用任何静态成员之前,CLR会自动调用静态构造函数。会自动调用静态构造函数。例如:例如:class SimpleClass static readonly long baseline; static SimpleClass() baseline = DateTime.Now.Ticks; 113.1.4 构造函数和析构函数构造函数和析构函数静态构造函数静态构造函数的的特点:特点:l静态构造函数既没有访问修饰符,也没有参数。静态构造函数既没有访问修饰符,也没有参数。l在创建第一个实例或引用任何静态成员之前,在创建第一个实例或引用任何静态成员之前,CLR会自动调用静态会自动调用静态
11、构造函数来初始化类。换言之,静态构造函数是在实例构造函数之构造函数来初始化类。换言之,静态构造函数是在实例构造函数之前执行的。前执行的。l程序员无法直接调用静态构造函数,也无法控制何时执行静态构造程序员无法直接调用静态构造函数,也无法控制何时执行静态构造函数函数l静态构造函数仅调用一次。如果静态构造函数引发异常,在程序运静态构造函数仅调用一次。如果静态构造函数引发异常,在程序运行所在的应用程序域的生存期内,类型将一直保持未行所在的应用程序域的生存期内,类型将一直保持未初始初始化的状态。化的状态。123.1.3 构造函数和析构函数构造函数和析构函数3. 默认构造函数和私有构造函数默认构造函数和私
12、有构造函数l每个类要求必须至少有一个构造函数。如果代码中没有声明构造函每个类要求必须至少有一个构造函数。如果代码中没有声明构造函数,则系统会自动为该类提供一个不带参数的空的构造函数,这种数,则系统会自动为该类提供一个不带参数的空的构造函数,这种自动提供的构造函数称为默认构造函数。自动提供的构造函数称为默认构造函数。l构造函数一般用构造函数一般用public修饰符,但也可以用修饰符,但也可以用private创建私有构造函创建私有构造函数。私有构造函数是一种特殊的构造函数,通常用在只包含静态成数。私有构造函数是一种特殊的构造函数,通常用在只包含静态成员的类中,用来阻止该类被实例化。员的类中,用来阻
13、止该类被实例化。l如果不指定构造函数的访问修饰符,默认是如果不指定构造函数的访问修饰符,默认是private。但是,一般都。但是,一般都显式地使用显式地使用private修饰符来清楚地表明该类不能被实例化。修饰符来清楚地表明该类不能被实例化。4重载构造函数重载构造函数l构造函数可以被重载(构造函数可以被重载(Overloading),但不能被继承。),但不能被继承。133.1.4 构造函数和析构函数构造函数和析构函数5析构函数和自动内存管理析构函数和自动内存管理l析构函数析构函数析构函数是一种用于实现销毁类实例所需操作的成员。析构函数是一种用于实现销毁类实例所需操作的成员。析构函数不能带参数,
14、也不能包含访问修饰符。析构函数不能带参数,也不能包含访问修饰符。析构函数是自动调用的,不能显式调用析构函数。析构函数是自动调用的,不能显式调用析构函数。l自动内存管理自动内存管理由由C#使用垃圾回收器实现,即自动决定何时释放和销毁内存使用垃圾回收器实现,即自动决定何时释放和销毁内存。如果声明如果声明了了析构函数,开发人员析构函数,开发人员也也可通过可通过System.GC的静态方法在一的静态方法在一定程度上控制垃圾回收器的行为。该类可用于请求执行一次回收操定程度上控制垃圾回收器的行为。该类可用于请求执行一次回收操作、并自动判断是否应该执行析构函数。作、并自动判断是否应该执行析构函数。143.1
15、.5 字段和局部变量字段和局部变量字段是类的成员,局部变量是块的成员。字段是类的成员,局部变量是块的成员。1字段字段字段是指在类或结构中声明的字段是指在类或结构中声明的“类级别类级别”的变量。或者说,字段是整的变量。或者说,字段是整个类内部的所有方法和事件中都可以访问的变量。个类内部的所有方法和事件中都可以访问的变量。2只读字段(只读字段(readonly)readonly关键字用于声明可以在程序运行期间只能初始化关键字用于声明可以在程序运行期间只能初始化“一次一次”的的字段。初始化的方法有两种,一种是在声明语句中初始化该字段,另字段。初始化的方法有两种,一种是在声明语句中初始化该字段,另一种
16、是在构造函数中初始化该字段。一种是在构造函数中初始化该字段。3局部变量局部变量局部变量是相对于字段来说的。可以将局部变量理解为局部变量是相对于字段来说的。可以将局部变量理解为“块块”级别的级别的变量变量。153.1.6 结构的定义和成员组织结构的定义和成员组织l结构是值类型,它和类的主要区别是结构中的数据保存在堆栈(结构是值类型,它和类的主要区别是结构中的数据保存在堆栈(Stack)中而不是保存在堆()中而不是保存在堆(Heap)中。另外,所有结构都隐式地)中。另外,所有结构都隐式地从从Object继承,但自定义结构时,不能从其他结构继承。继承,但自定义结构时,不能从其他结构继承。l结构成员和
17、类成员相同,包括字段、结构成员和类成员相同,包括字段、属性属性、构造函数构造函数、方法、事件、方法、事件、运算符、索引器、析构函数等。运算符、索引器、析构函数等。【例【例3-2】 分别用类和结构定义具有分别用类和结构定义具有x、y坐标的点,然后在主程序中坐标的点,然后在主程序中各创建并初始化一个含有各创建并初始化一个含有10个点的数组。个点的数组。163.2 属性和方法属性和方法l3.2.1 属性(属性(Property)l3.2.2 方法方法173.2.1 属性属性(Property)属性属性(property)是字段的扩展,用于提供对字段读写的手段。属是字段的扩展,用于提供对字段读写的手段
18、。属性和字段的区别是属性不表示存储位置,而是通过性和字段的区别是属性不表示存储位置,而是通过get访问器和访问器和set访问器指定读写字段的值时需要执行的语句。访问器指定读写字段的值时需要执行的语句。1. 常规属性声明常规属性声明如果需要对外公开某些字段,并对字段的值进行验证,可以利用如果需要对外公开某些字段,并对字段的值进行验证,可以利用属性的属性的get和和set访问器来实现。访问器来实现。2. 自动实现的属性自动实现的属性自动实现的属性是指开发人员只需要声明属性,而与该属性对应自动实现的属性是指开发人员只需要声明属性,而与该属性对应的字段则由系统自动提供。自动实现的属性必须同时声明的字段
19、则由系统自动提供。自动实现的属性必须同时声明get和和set访问器。访问器。183.2.2 方法方法方法是类或结构的一种成员,是一组程序代码的集合,用于完成指定方法是类或结构的一种成员,是一组程序代码的集合,用于完成指定的功能。每个方法都有一个方法名,便于识别和让其他方法调用。的功能。每个方法都有一个方法名,便于识别和让其他方法调用。1方法的声明和参数传递方法的声明和参数传递定义方法的一般形式为定义方法的一般形式为访问修饰符访问修饰符 返回值类型返回值类型 方法名方法名(参数序列参数序列) 语句序列语句序列方法声明中的参数用于向方法传递值或变量引用。方法的参数从调用方法声明中的参数用于向方法传
20、递值或变量引用。方法的参数从调用该方法时指定的实参获取实际值。有四类参数:该方法时指定的实参获取实际值。有四类参数:值参数、引用参数、值参数、引用参数、输出参数和参数数组。输出参数和参数数组。193.2.2 方法方法(1) 值参数值参数值参数(值参数(value parameter)用于传递输入参数。一个值参数相当于)用于传递输入参数。一个值参数相当于一个局部变量,只是它的初始值来自为该形参传递的实参。一个局部变量,只是它的初始值来自为该形参传递的实参。【例【例3-3】演示值参数的基本用法。】演示值参数的基本用法。203.2.2 方法方法(2) 引用参数引用参数 引用参数(引用参数(refer
21、ence parameter)用于传递输入和输出参数。为)用于传递输入和输出参数。为引用参数传递的实参必须是变量,并且在方法执行期间,引用参数与引用参数传递的实参必须是变量,并且在方法执行期间,引用参数与实参变量表示同一存储位置。引用参数使用实参变量表示同一存储位置。引用参数使用ref修饰符声明。修饰符声明。【例【例3-4】演示引用参数的基本用法。】演示引用参数的基本用法。213.2.2 方法方法(3) 输出参数输出参数输出参数(输出参数(output parameter)用于传递返回的参数,用)用于传递返回的参数,用out关键字关键字声明。格式为声明。格式为 out 参数类型参数类型 参数名
22、参数名【例【例3-5】演示】演示out关键字的用法。关键字的用法。223.2.2 方法方法(4) 参数数组参数数组 参数数组用于向方法传递可变数目的实参,用参数数组用于向方法传递可变数目的实参,用params关键字声关键字声明。如果方法有多个参数,只有最后一个参数才可以用参数数组声明。如果方法有多个参数,只有最后一个参数才可以用参数数组声明,并且参数数组的类型必须是一维数组类型。明,并且参数数组的类型必须是一维数组类型。【例【例3-6】演示】演示params关键字的基本用法。关键字的基本用法。233.2.2 方法方法2. 方法重载方法重载方法重载是指具有相同的方法名,但参数类型或参数个数不完全
23、方法重载是指具有相同的方法名,但参数类型或参数个数不完全相同的多个方法可以同时出现在一个类中。这种技术非常有用,相同的多个方法可以同时出现在一个类中。这种技术非常有用,在项目开发过程中,我们会发现很多方法都需要使用方法重载来在项目开发过程中,我们会发现很多方法都需要使用方法重载来实现。实现。243.3 类的继承与多态性类的继承与多态性l3.3.1 封装封装l3.3.2 继承继承l3.3.3 多态(多态(new、virtual、override)253.3.1 封装封装封装一个类时,既可以像定义一个普通的类一样,也可以将类声明为封装一个类时,既可以像定义一个普通的类一样,也可以将类声明为抽象类或
24、者密封类。抽象类或者密封类。1抽象类(抽象类(abstract class)抽象类使用抽象类使用abstract修饰符来描述,用于表示该类中的成员(例如方修饰符来描述,用于表示该类中的成员(例如方法)不一定实现,即可以只有声明部分而没有实现部分。抽象类只能法)不一定实现,即可以只有声明部分而没有实现部分。抽象类只能用做其他类的基类,而且无法直接实例化抽象类。用做其他类的基类,而且无法直接实例化抽象类。2密封类(密封类(sealed)密封类是指不能被其他类继承的类。在密封类是指不能被其他类继承的类。在C#语言中,用语言中,用sealed修饰符声修饰符声明密封类。由于密封类不能被其他类继承,因此系
25、统就可以在运行时明密封类。由于密封类不能被其他类继承,因此系统就可以在运行时对密封类中的内容进行优化,从而提高系统的性能。对密封类中的内容进行优化,从而提高系统的性能。263.3.2 继承继承继承用于简化类的设计工作量,同时还能避免设计的不一致性。一般继承用于简化类的设计工作量,同时还能避免设计的不一致性。一般将公共的、相同的部分放在被继承的类中,非公共的、不相同的部将公共的、相同的部分放在被继承的类中,非公共的、不相同的部分放在继承的类中。分放在继承的类中。1类继承的一般形式类继承的一般形式在在C#中,用冒号(中,用冒号(“:”)表示继承。被继承的类叫基类或者父类,)表示继承。被继承的类叫基
26、类或者父类,从基类继承的类叫扩充类,又叫派生类或者子类。从基类继承的类叫扩充类,又叫派生类或者子类。l继承意味着一个类隐式地将它的基类的所有成员当作自已的成员,继承意味着一个类隐式地将它的基类的所有成员当作自已的成员,而且派生类还能够在继承基类的基础上继续添加新的成员。但是,而且派生类还能够在继承基类的基础上继续添加新的成员。但是,基类的实例构造函数、静态构造函数和析构函数除外。基类的实例构造函数、静态构造函数和析构函数除外。l扩充类不能继承基类中所定义的扩充类不能继承基类中所定义的private成员,只能继承基类的成员,只能继承基类的public成员或成员或protected成员。成员。27
27、3.3.2 继承继承2继承过程中构造函数的处理继承过程中构造函数的处理l扩充类可继承基类中声明为扩充类可继承基类中声明为public或或protected的成员的成员。l构造函数构造函数在扩充类中在扩充类中不会被继承下来。如果让构造函数也能继承,由于扩不会被继承下来。如果让构造函数也能继承,由于扩充类中无法访问基类的私有成员,从而导致程序运行失败。充类中无法访问基类的私有成员,从而导致程序运行失败。lC#在内部按照下列顺序处理构造函数:从扩充类依次向上寻找其基类,直在内部按照下列顺序处理构造函数:从扩充类依次向上寻找其基类,直到找到最初的基类,然后开始执行最初的基类的构造函数,再依次向下执到找
28、到最初的基类,然后开始执行最初的基类的构造函数,再依次向下执行扩充类的构造函数,直至执行完最终的扩充类的构造函数为止。行扩充类的构造函数,直至执行完最终的扩充类的构造函数为止。【例【例3-7】演示继承的基本用法。】演示继承的基本用法。283.3.3 多态多态(new、virtual、override)多态性的定义是:同一操作可分别作用于不同的类的实例,此时不同多态性的定义是:同一操作可分别作用于不同的类的实例,此时不同的类将进行不同的解释,最后产生不同的执行结果。的类将进行不同的解释,最后产生不同的执行结果。1虚拟(虚拟(virtual)和重写()和重写(override)使用虚拟方法与重写方
29、法时,需要注意下面几个方面。使用虚拟方法与重写方法时,需要注意下面几个方面。l虚拟方法不能声明为静态(虚拟方法不能声明为静态(static)的。因为静态的方法是应用在类)的。因为静态的方法是应用在类这一层次的,而面向对象的多态性只能通过对象进行操作,所以无这一层次的,而面向对象的多态性只能通过对象进行操作,所以无法通过类名直接调用。法通过类名直接调用。lvirtual不能和不能和private一起使用。声明为一起使用。声明为private就无法在扩充类中重就无法在扩充类中重写了。写了。l重写方法的名称、参数个数、参数类型以及返回类型都必须和虚拟重写方法的名称、参数个数、参数类型以及返回类型都必
30、须和虚拟方法的一致。方法的一致。293.3.3 多态多态(new、virtual、override)2. 隐藏(隐藏(new)l编写方法时,如果希望扩充类重写基类的方法,需要在扩充类中用编写方法时,如果希望扩充类重写基类的方法,需要在扩充类中用override声明;如果希望隐藏基类的方法,在扩充类中需要用声明;如果希望隐藏基类的方法,在扩充类中需要用new声声明,这就是明,这就是C#语言进行版本控制的依据。语言进行版本控制的依据。l除了重写基类的方法外,还可以在扩充类中使用除了重写基类的方法外,还可以在扩充类中使用new修饰符来隐藏修饰符来隐藏基类中同名的方法。基类中同名的方法。l与方法重写不
31、同的是,使用与方法重写不同的是,使用new关键字时并不要求基类中的方法声关键字时并不要求基类中的方法声明为明为virtual,只要在扩充类的方法前声明为,只要在扩充类的方法前声明为new,就可以隐藏基类的,就可以隐藏基类的方法。方法。303.3.3 多态多态(new、virtual、override)3. 在扩充类中直接调用基类的方法在扩充类中直接调用基类的方法可以在扩充类中通过可以在扩充类中通过base关键字直接调用基类的方法,例如:关键字直接调用基类的方法,例如:class MyBaseClass public virtual int MyMethod() return 5; class
32、MyDerivedClass : MyBaseClass public override int MyMethod() return base.MyMethod () * 4; 313.4 常用结构和类的用法常用结构和类的用法l3.4.1 Math类类l3.4.2 DateTime结构和结构和TimeSpan结构结构l3.4.3 秒表秒表和和计时计时器器l3.4.4 随机数随机数323.4.1 Math类类Math类定义了各种常用的数学运算,该类位于类定义了各种常用的数学运算,该类位于System命名空间下,命名空间下,其作用有两个,一个是为三角函数、对数函数和其他通用数学函数提其作用有两个,一个是为三角函数、对数函数和其他通用数学函数提供常数,如供常数,如PI值等;二是通过静态方法提供了各种数学运算功能。值等;二是通过静态方法提供了各种数学运算功能。【例【例3-8】演示】演示Math类的基本用法。类的基本用法。333.4.2 DateTime结构和结构和TimeSpan结构结构用于用于对日
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 学校园安全隐患大排查大整治百日攻坚专项行动实施方案
- 2025年北京协和医院变态(过敏)反应科合同制科研助理招聘备考题库及完整答案详解1套
- 2025青岛卫生人才教育培训平台公需科目试题及答案
- 2025年绵阳市公安局安州区分局公开招聘警务辅助人员的备考题库及参考答案详解一套
- 广东2025年民生银行汕头分行社会招聘备考题库有答案详解
- 药明合联ADC浪潮高壁垒CDMO迎来战略机遇期首次覆盖给予“买入”评级
- java课程设计数据库
- 2025 九年级语文下册小说情节高潮分析课件
- 中共东莞市委外事工作委员会办公室2025年公开招聘编外聘用人员备考题库及参考答案详解一套
- 2025年全球锂电池铜箔行业竞争格局报告
- 【数 学】2025-2026学年北师大版数学七年级上册期末练习(一)
- (一诊)成都市2023级高三高中毕业班第一次诊断性检测英语试卷(含官方答案)
- 2026年哈尔滨铁道职业技术学院单招职业技能考试题库带答案
- 珠海市纪委监委公开招聘所属事业单位工作人员12人考试题库附答案
- 月子会所的礼仪培训课件
- 学堂在线 雨课堂 学堂云 积极心理学(上)厚德载物篇 章节测试答案
- 中国法律史-第二次平时作业-国开-参考资料
- GB/T 39167-2020电阻点焊及凸焊接头的拉伸剪切试验方法
- GB/T 17648-1998绝缘液体局部放电起始电压测定试验程序
- 拉丝机培训第四版课件
- DB33∕T 1222-2020 新建住宅小区生活垃圾分类设施设置标准
评论
0/150
提交评论