




已阅读5页,还剩73页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第二章面向对象程序设计,2,目录,2.1面向对象的基本思想2.2类与对象2.3类的方法与重载2.4域、属性和索引2.5继承与多态2.6抽象类与接口2.7委托与事件,2.2类与对象,类的定义定义形式修饰符(可访问性修饰符)类的成员类成员静态成员和实例成员创建对象与构造函数对象的生存期构造函数及重载,2.2.1类的定义,类使用class关键字声明。形式如下:类修饰符class类名:基类以及实现的接口列表类体/定义字段、属性、方法、事件等类成员类修饰符:用于对类的可访问性、abstract、static、virtual等特性进行声明。可访问性:定义类、成员的可访问级别,用来控制是否能在其他类中或其他程序文件中使用它们,包括public、internal、protected、private关键字,2.2.1类的定义,publicclassPersonpublicstringname;/FieldpublicPerson()/Constructorname=unknown;publicvoidSetName(stringnewName)/Methodname=newName;classTestPersonstaticvoidMain()Personperson=newPerson();Console.WriteLine();person.SetName(JohnSmith);Console.WriteLine();/*Output:unknownJohnSmith*/,2.2.1类的定义,可访问性修饰符:4个关键字构成了5种可访问级别修饰符既可用于类特性、又可用于类成员特性的声明。如:static用于类声明时,表明该类是一个静态类;当用于类中的方法成员时,表明该方法是一个静态方法。本小节主要说明可访问修饰符,abstract、sealed、static、virtual等修饰符将在后续各节说明。,2.2.1类的定义,public访问修饰符,classPointTestpublicintx;publicinty;classMainClass4staticvoidMain()PointTestp=newPointTest();/Directaccesstopublicmembers:p.x=10;p.y=15;Console.WriteLine(x=0,y=1,p.x,p.y);/Output:x=10,y=15,2.2.1类的定义,protected访问修饰符,classAprotectedintx=123;classB:AstaticvoidMain()Aa=newA();Bb=newB();/ErrorCS1540,becausexcanonlybeaccessedby/classesderivedfromA./a.x=10;/OK,becausethisclassderivesfromA.b.x=10;,2.2.1类的定义,internal访问修饰符,/Assembly1.csinternalclassBaseClasspublicstaticintintM=0;,/Assembly1_a.csclassTestAccessstaticvoidMain()BaseClassmyBase=newBaseClass();/error,2.2.1类的定义,private访问修饰符,classPrivateTeststaticvoidMain()Employee2e=newEmployee2();/Thedatamembersareinaccessible(private),so/theycantbeaccessedlikethis:/stringn=;/doubles=e.salary;/nameisindirectlyaccessedviamethod:stringn=e.GetName();/salaryisindirectlyaccessedviapropertydoubles=e.Salary;,classEmployee2privatestringname=FirstName,LastName;privatedoublesalary=100.0;publicstringGetName()returnname;publicdoubleSalarygetreturnsalary;,2.2.1类的定义,若未指定访问修饰符,则使用默认的可访问性。类的默认可访问性是internal;类成员的默认可访问性是private。枚举、接口、结构及各自成员也具有可访问性枚举、接口、结构的默认可访问性与类相同;它们成员的默认可访问性见:,2.2.2类的成员,类的成员包括类中声明的所有成员:字段(field):是在类内声明的变量。字段可以是内置数值类型或其他类的实例。常量(const):在类内声明的符号常量。属性(property):可以像类中字段一样访问的方法,属性通过称作“访问器”的特殊方法为类字段值的更改提供保护。方法(method):即类内声明的函数,定义类可以执行的操作,方法可以有输入参数、也可有返回值。构造函数(constructor):一种特殊的方法,是类实例化时(即创建对象变量时)自动调用的方法,通常用于对象的数据初始化。,2.2.2类的成员,类的成员包括类中声明的所有成员:析构函数(destructor):一种特殊的方法,用于对象变量不再使用后的资源释放等工作,c#中一般不需显式释放。运算符重载(operatoroverloading):更改运算符的行为。在重载运算符时,在类中将该运算符定义为公共静态方法。索引器(indexor):使类的实例可按与数组相同的(语法)方式进行访问。事件(event):向其他对象提供有关发生事情(如单击按钮或成功完成某个方法)的通知。事件是使用委托定义和触发的。,2.2.2类的成员,publicclassPersonprivatestringname;publicstringNamegetreturnname;setname=value;publicPerson(stringname)=name;publicvoidTalk()Console.WriteLine(“name:0”,name);,Field,Method,Property,Constructor,2.2.2类的成员,静态成员与实例成员使用static修饰符的成员为静态成员,反之为非静态成员(即实例成员)。静态成员属于类而不属于类的任何实例,始终通过类名访问静态成员;而实例成员属于某个特定的实例,要通过对象名访问。静态成员-静态字段:常用于存储必须在所有实例之间共享的值。,2.2.2类的成员,静态成员-静态方法静态方法、静态属性只能使用类的静态成员;实例方法既可以使用类的静态成员,也可以使用类的非静态成员。【例2-1】雇员类。,publicclassPersonpublicintage;privatestaticstringname=c#;publicstaticstringNamegetreturnname;setname=value;publicstaticvoidSayHello()Console.WriteLine(Hello,0,name);publicvoidTellAge()Console.WriteLine(0is1yearsold.,name,age);,2.2.2类的成员,classProgramstaticvoidMain()Person.SayHello();Person.Name=Zhang;Person.SayHello();,publicclassPersonpublicintage;privatestaticstringname=c#;publicstaticstringNamegetreturnname;setname=value;publicstaticvoidSayHello()Console.WriteLine(Hello,0,name);publicvoidTellAge()Console.WriteLine(0is1yearsold.,name,age);,2.2.2类的成员,classProgramstaticvoidMain()Person.SayHello();Person.Name=Zhang;Person.SayHello();Person.age=20;Person.TellAge();,publicclassPersonpublicintage;privatestaticstringname=c#;publicstaticstringNamegetreturnname;setname=value;publicstaticvoidSayHello()Console.WriteLine(Hello,0,name);publicvoidTellAge()Console.WriteLine(0is1yearsold.,name,age);,2.2.2类的成员,classProgramstaticvoidMain()Person.Name=Zhang;Person.SayHello();Personp1=newPerson();p1.age=20;p1.TellAge();,publicclassPersonpublicintage;privatestaticstringname=c#;publicstaticstringNamegetreturnname;setname=value;publicstaticvoidSayHello()Console.WriteLine(Hello,0,name);publicvoidTellAge()Console.WriteLine(0is1yearsold.,name,age);,2.2.2类的成员,classProgramstaticvoidMain()Personp1=newPerson();p1.age=20;p1.Name=Zhang;p1.TellAge();/Person.SayHello();,静态类:类也可声明为静态类,但静态类不能实例化,即不能使用new关键字创建静态类的变量,须使用类名本身访问静态类的成员。主要特征:仅包含静态成员。无法实例化。是密封的(即不可被继承)。不能包含实例构造函数。静态类主要作为一些公共方法集的容器。如:.NetFramework的数学运算静态类System.Math。,2.2.2类的成员,2.2.3创建对象与构造函数,创建对象类声明后,可以创建类的实例,即对象变量。创建类实例使用new关键字,格式如下:类名对象名=new构造函数(参数类表);如:PointmyPoint=newPoint();注:静态类不能实例化。对象的生存期当使用new创建时,对象开始存在;当对象变量超出其作用域或对象变量=null时,则对象变量消失,并由系统垃圾回收器回收其所占内存资源。,2.2.3创建对象与构造函数,对象的生存期当对象创建时,系统自动调用其构造函数为对象分配存储空间。若相应类无自定义构造函数,则系统自动生成一个默认的无参构造函数;若需进行相关初始化操作(如对类的成员赋值等),则需自定义构造函数。当对象消失时,系统自动调用其析构函数完成清除工作。一般不用自定义析构函数,若在对象消失前需完成一些收尾工作(如:保存数据到文件、输出提示信息等),则需自定义析构函数。,2.2.3创建对象与构造函数,构造函数及其重载构造函数遵循如下规定:构造函数的函数名与类的名称一样,构造函数没有返回值及返回类型;一个类可以有多个构造函数(即构造函数可以被重载);当类没有构造函数时,则自动生成一个默认的无参构造函数,并使用默认值初始化对象的字段(例如,int将初始化为0);反之,当类有构造函数时,则不会自动生成默认构造函数。,2.2.3创建对象与构造函数,构造函数及其重载【例】无自定义构造函数。,publicclassPersonpublicintage;publicstringname;classTestPersonstaticvoidMain()Personperson=newPerson();Console.WriteLine(Name:0,Age:1,,person.age);/Output:Name:,Age:0,构造函数及其重载【例2-2】多个构造函数。,2.2.3创建对象与构造函数,classCoOrdspublicintx,y;/无参构造函数:publicCoOrds()x=0;y=0;/带两个参数的构造函数:publicCoOrds(intx,inty)this.x=x;this.y=y;/OverridetheToStringmethod:publicoverridestringToString()return(String.Format(0,1),x,y);,classMainClassstaticvoidMain()CoOrdsp1=newCoOrds();CoOrdsp2=newCoOrds(5,3);/DisplaytheresultsusingtheoverridenToStringmethod:Console.WriteLine(Point#1at(0,1),p1.x,p1.y);Console.WriteLine(Point#2at0,p2);/*Output:Point#1at(0,0)Point#2at(5,3)*/,2.2.3创建对象与构造函数,派生类的构造函数执行顺序派生类在实例化生成对象时自顶向下依次调用其各级基类的构造函数(即根基类的构造函数System.Object.Object()最先被调用),最后调用自己的构造函数。默认调用基类的无参构造函数(即默认构造函数),或者说:默认调用基类的默认构造函数。,派生类的构造函数执行顺序【例2-3】,2.2.3创建对象与构造函数,classProgramstaticvoidMain(stringargs)MyDerivedClassa=newMyDerivedClass();Console.WriteLine();/空一行MyDerivedClassb=newMyDerivedClass(100);Console.WriteLine();/空一行MyDerivedClassc=newMyDerivedClass(100,-100);,/基类publicclassMyBaseClasspublicMyBaseClass()Console.WriteLine(基类的无参构造函数);publicMyBaseClass(inti)Console.WriteLine(基类的1个参数构造函数,i=0,i);/派生类publicclassMyDerivedClass:MyBaseClasspublicMyDerivedClass()Console.WriteLine(派生类的无参构造函数);publicMyDerivedClass(inti)Console.WriteLine(派生类的1个参数构造函数,i=0,i);publicMyDerivedClass(inti,intj)Console.WriteLine(派生类的2个参数构造函数,i=0,j=0,i,j);,执行顺序:System.Object.Object();MyBaseClass.MyBaseClass();MyDerivedClass.相应构造函数。,派生类的构造函数执行顺序【例2-3】,2.2.3创建对象与构造函数,/基类publicclassMyBaseClass/publicMyBaseClass()/Console.WriteLine(基类的无参构造函数);/publicMyBaseClass(inti)Console.WriteLine(基类的1个参数构造函数,i=0,i);/派生类publicclassMyDerivedClass:MyBaseClasspublicMyDerivedClass()Console.WriteLine(派生类的无参构造函数);publicMyDerivedClass(inti)Console.WriteLine(派生类的1个参数构造函数,i=0,i);publicMyDerivedClass(inti,intj)Console.WriteLine(派生类的2个参数构造函数,i=0,j=0,i,j);,classProgramstaticvoidMain(stringargs)MyDerivedClassa=newMyDerivedClass();Console.WriteLine();/空一行MyDerivedClassb=newMyDerivedClass(100);Console.WriteLine();/空一行MyDerivedClassc=newMyDerivedClass(100,-100);,2.2.3创建对象与构造函数,派生类的构造函数执行顺序关键字base可指定调用基类的某个构造函数。除base关键字外,还可使用另一个关键字this,调用同一类的另一个构造函数。,派生类的构造函数执行顺序【例2-3】,2.2.3创建对象与构造函数,classProgramstaticvoidMain(stringargs)MyDerivedClassc=newMyDerivedClass(100,-100);,/基类publicclassMyBaseClasspublicMyBaseClass()Console.WriteLine(基类的无参构造函数);publicMyBaseClass(inti)Console.WriteLine(基类的1个参数构造函数,i=0,i);/派生类publicclassMyDerivedClass:MyBaseClasspublicMyDerivedClass()Console.WriteLine(派生类的无参构造函数);publicMyDerivedClass(inti)Console.WriteLine(派生类的1个参数构造函数,i=0,i);publicMyDerivedClass(inti,intj):base(i)Console.WriteLine(派生类的2个参数构造函数,i=0,j=0,i,j);,派生类的构造函数执行顺序【例2-3】,2.2.3创建对象与构造函数,classProgramstaticvoidMain(stringargs)MyDerivedClassc=newMyDerivedClass(100,-100);,/基类publicclassMyBaseClasspublicMyBaseClass()Console.WriteLine(基类的无参构造函数);publicMyBaseClass(inti)Console.WriteLine(基类的1个参数构造函数,i=0,i);/派生类publicclassMyDerivedClass:MyBaseClasspublicMyDerivedClass()Console.WriteLine(派生类的无参构造函数);publicMyDerivedClass(inti)Console.WriteLine(派生类的1个参数构造函数,i=0,i);publicMyDerivedClass(inti,intj):base(10)Console.WriteLine(派生类的2个参数构造函数,i=0,j=0,i,j);,2.2.3创建对象与构造函数,派生类的构造函数执行顺序【例2-3】,/基类publicclassMyBaseClasspublicMyBaseClass()Console.WriteLine(基类的无参构造函数);publicMyBaseClass(inti)Console.WriteLine(基类的1个参数构造函数,i=0,i);/派生类publicclassMyDerivedClass:MyBaseClasspublicMyDerivedClass()Console.WriteLine(派生类的无参构造函数);publicMyDerivedClass(inti)Console.WriteLine(派生类的1个参数构造函数,i=0,i);publicMyDerivedClass(inti,intj):this(i)Console.WriteLine(派生类的2个参数构造函数,i=0,j=0,i,j);,classProgramstaticvoidMain(stringargs)MyDerivedClassc=newMyDerivedClass(100,-100);,2.2.3创建对象与构造函数,派生类的析构函数执行顺序先执行自己的析构函数,再自底向上依次执行各基类的析构函数,最后执行根基类System.Object的析构函数。一个类只能有一个析构函数,无法重载析构函数,析构函数既没有参数、也没有修饰符,析构函数在对象消失时将被自动调用。一般不需自己编写析构函数。,2.2.3创建对象与构造函数,派生类的析构函数执行顺序,classFirstFirst()Console.WriteLine(Firstsdestructoriscalled.);classSecond:FirstSecond()Console.WriteLine(Secondsdestructoriscalled.);classThird:SecondThird()Console.WriteLine(Thirdsdestructoriscalled.);classTestDestructorsstaticvoidMain()Thirdt=newThird();,2.3类的方法与重载,方法的定义方法的参数类型静态方法和实例方法方法重载运算符重载this关键字,2.3.1方法的定义,在c#中,数据和操作均封装在类中,数据是以类字段、常量、属性的形式出现,而操作主要体现在方法上。方法的一般格式为:方法修饰符返回值类型方法名(参数列表)方法体方法修饰符与类修饰符一样,既包括public、internal、protected、private等访问级别,也包括static、abstract、virtual、override等修饰符。,2.3.2方法的参数类型,C#方法的形参有四种类型:值参数、引用参数、输出参数、参数数组。值参数:未用任何修饰符声明的形参为值参数。值形参在调用该函数(方法、构造函数、访问器、运算符)时创建,并将实参值传递给值形参,当该函数执行结束时值形参被销毁。对值形参值的修改不会影响实参值。,2.3.2方法的参数类型,引用参数:用ref修饰符声明的形参为引用参数。在调用函数时传递给引用形参的是实参地址,故对引用形参的修改将直接影响实参值。在函数调用前,相应实参必须有值。输出参数:用out修饰符声明的形参为输出参数。若函数返回多个值,可使用输出形参。输出形参与引用形参类似,传递给其的是实参地址。与引用参数不同:在函数调用前,相应实参无需有值。,2.3.2方法的参数类型,参数数组:用params修饰符声明的形参数组为参数数组,它允许向函数传递个数变化的参数。在函数的形参列表中只允许出现一个参数数组,且在函数具有多个形参时,参数数组必须放在整个参数列表的最后。参数数组只能是一维数组,且params修饰符不能与ref、out修饰符组合使用。【例2-4】四种参数类型。,2.3.3静态方法与实例方法,使用static声明的方法是静态方法,反之为实例方法。静态方法属于类所有,通过类名访问,静态方法只能访问类的静态成员。实例方法属于该类创建的某个实例所有,通过对象名访问,实例方法可以访问类的任何成员。【例2-5】静态方法与实例方法。,2.3.4方法重载,类中两个以上的方法名字相同,但使用的参数类型或参数个数不同,称为方法重载(overload)。编译器会依据具体情况调用不同的方法。重载是面向对象技术中多态性的一种体现。【例2-6】方法重载。方法重载也可以用于派生类对基类方法的重载。【例】见下页。方法重写(override)是多态性的另一种体现,也称为覆盖。方法重写主要指基类的虚方法、非虚方法在派生类中被重写。,2.3.4方法重载,classMyBaseClasspublicintMyFun(inti,intj)returni+j;classMyDerivedClass:MyBaseClasspublicstringMyFun(stringstr1,stringstr2)returnstr1+str2;classProgramstaticvoidMain()MyDerivedClassa=newMyDerivedClass();Console.WriteLine(派生类的函数值=0n,a.MyFun(100,200);Console.WriteLine(基类的函数值=0n,a.MyFun(aaa,bbb);,2.3.5运算符重载,运算符重载(operatoroverloading)是用户对运算符赋予新的含义。一般格式如下:publicstatic返回值类型operator运算符(运算对象列表)重载实现部分;【例2-7】复数运算。重载的运算符始终是静态的,原因:WhyareoverloadedoperatorsalwaysstaticinC#?,2.3.6this运算符,this关键字代表类的当前对象,成员通过this关键字可以知道自己属于类的哪一个实例。this关键字是隐含的,它隐含于类的成员函数中。注意:静态函数没有this关键字。this关键字用于从构造函数、实例方法、实例访问器中访问成员。【例】classEmployeestringname,alias;publicEmployee(stringname,stringalias)=name;this.alias=alias;,2.4域、属性和索引器,域即类字段(field),是类的成员变量。声明格式:域修饰符类型域名;【例】classMyClasspublicinta;域修饰符包public、protected、internal、private、static、readonly等。readonly表明该域为只读域,只能在域定义时赋初值及构造函数中进行赋值,其他情况是只读。,2.4域、属性和索引器,域若类字段没有赋初值,其值为默认值(int为0,float为0.0,bool为false,string为null,对象为null)。,classAgereadonlyint_year;Age(intyear)_year=year;voidChangeYear()/_year=1967;/Compileerrorifuncommented.,2.4域、属性和索引器,属性与域相比,属性具有良好的封装性。属性不允许直接操作数据内容,而是通过访问器进行访问,可以对其值进行保护。定义格式:访问修饰符类型属性名get/get语句用于返回属性值(即读)set/set语句用于给属性赋值(即写)get语句、set语句称为访问器(accessor)。,2.4域、属性和索引器,属性value关键字代表属性接受的值。,privateintmyInt;publicintMyIntPropgetreturnmyInt*myInt;setmyInt=value;,classWindowprivatedoublem_width=30;publicdoubleWidthgetreturnm_width;setm_width=value;publicstaticvoidMain()Windoww=newWindow();w.Width=20;Console.WriteLine(“Thewidthofwindowis0.”,w.Width);,2.4域、属性和索引器,属性只有get语句表示该属性为只读属性,只有set语句表示该属性为只写属性,既有get又有set语句表示该属性为可读写属性。属性可以与一些操作关联,从而对数据进行保护【例】setif(value=0,2.4域、属性和索引器,索引器索引器允许类或结构的实例按照与数组相同的方式进行索引。索引器类似于属性,不同的是索引器包含参数。定义索引的方式和属性类似:包含访问器使用this关键字定义一个索引值【例2-8】访问私有数组的索引器。,2.5继承与多态,继承派生类System.Object根类多态性方法重载(overload):类内方法的重载,派生类对基类方法的重载。方法重写(override):指派生类对基类方法的重写,包括:非虚方法的重写(不使用override关键字),虚方法的重写(使用override关键字)。密闭类,2.5.1继承,继承在现有类的基础上创建新类,新类不仅继承现有类的成员,而且可以重新定义或加入新的成员,从而形成类的层次或等级结构。一般称被继承的类为基类或父类,而继承后产生的类为派生类或子类。类修饰符class派生类类名:基类类名类体;,2.5.1继承,C#类只支持单继承,即只能有一个父类。Object是所有类的基类。派生类可以直接使用基类的成员,可以有自己的新成员,也可以对基类的成员函数进行重写(函数名、形参类型和个数均相同)或重载(函数名相同,但参数类型和个数不相同)。派生类构造函数执行顺序:自顶向下。派生类析构函数执行顺序:自底向上。可以直接从派生类转换为基类(隐式转换),不能从基类转换为派生类(强制转换将出现异常)。,【例2-10】,2.5.1继承,publicclassPersonpublicintage;privatestringname=c#;publicstringNamegetreturnname;setname=value;publicvoidSayHello()Console.WriteLine(Hello,0,name);publicvoidTellAge()Console.WriteLine(0is1yearsold.,name,age);,publicclassChinese:PersonpublicclassKorean:Person,classProgramstaticvoidMain()Chinesep1=newChinese();p1.Name=Zhang;p1.SayHello();,2.5.1继承,publicclassPersonpublicintage;protectedstringname=c#;publicstringNamegetreturnname;setname=value;publicvoidSayHello()Console.WriteLine(Hello,0,name);publicvoidTellAge()Console.WriteLine(0is1yearsold.,name,age);,publicclassChinese:PersonpublicvoidSayHello()Console.WriteLine(你好,0,name);publicclassKorean:PersonpublicvoidSayHello()Console.WriteLine(0,思密达,name);,classProgramstaticvoidMain()Chinesep1=newChinese();p1.Name=Zhang;p1.SayHello();Koreanp2=newKorean();p2.Name=Jinchonri;p2.SayHello();,2.5.1继承,publicclassPersonpublicintage;protectedstringname=c#;publicstringNamegetreturnname;setname=value;publicvoidSayHello()Console.WriteLine(Hello,0,name);publicvoidTellAge()Console.WriteLine(0is1yearsold.,name,age);,publicclassChinese:PersonpublicvoidSayHello()Console.WriteLine(你好,0,name);publicclassKorean:P
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025别墅装修泥瓦工程劳务分包合同(含防水保温)
- 2025版三方融资租赁合同范本适用于能源产业
- 2025版净水器滤芯更换与水环境监测服务合同
- 2025厂长任期创新成果奖励劳动合同协议书
- 2025年度城市地下综合管廊通风与排烟系统施工合同
- 2025第4章WTO与国际贸易风险管理咨询合同
- 2025年度粮食收购居间代理服务合同范本下载
- 2025版土地流转与农村产权交易平台建设合同补充协议
- 2025版农业灌溉设备维护与节水服务合同范本
- 2025版车展专属VIP贵宾接待与专属活动合同
- 2025至2030中国电容膜片真空计行业发展趋势分析与未来投资战略咨询研究报告
- 社工儿童沟通技巧课件
- 物业追缴奖励方案(3篇)
- 2025年甘肃省高考物理试卷(含答案)
- 2025二年级语文下册期末统考测试卷汇-总
- 血管活性药物静脉输注护理
- 造林绿化落地上图技术规范(试行)
- 2025年浙江省杭州市西湖区九年级中考一模科学试卷
- 苯乙酮项目可行性研究报告
- T/CIE 166-2023企业级固态硬盘测试规范第2部分:性能测试
- 2025年智慧城市产业园区开发建设社会稳定风险评估与风险防范对策报告
评论
0/150
提交评论