




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、武汉大学测绘学院2008-2009学年度第二学期期末考试面向对象程序设计课程试卷(A卷)出题者 李军, 李英冰,艾松涛 审核人 班级 学号 姓名 成绩 一、选择题(以下各题中只有一个正确答案。每小题2分,共40分)1.C#中的数据类型long是( C)A.Int32 B. Int16 C. Int64 D. int2. C#中的char数据类型是(B )A.ASCII字符集 B. unicode字符集 C. 其他字符集3. C#中封装一组API函数是用( C)A. 抽象类 B. 分部类 C. 静态类4.”委托”是( D)A.接口 B. 函数 C. 抽象类 D. 密封类5. ”事件”是( BC)
2、A.接口 B. 函数 C. 属性 D. 密封类6.C#中的类继承( SonClass : BaseClass )指的是( B)A. private继承 B. public继承 C. protected继承7.+运算符的重载,正确的定义是(B )A. static double operator +( double a, double b) B. public static double operator +( double a, double b) C. public double operator +( double a, double b) D. protected double oper
3、ator +( double a, double b) 8. C#中的属性是(D )A.变量 B.私有函数 C.字段 D. get/set方法9. C#中的接口是(B )A.属性 B.对不同对象相同功能的封装 C.构造函数 D.变量10. string st, st1 = ”I am”, st2 = ” here.”; 不正确的语句是(B)A. st=st1+st2; B. st=strcat(st1, st2); C. st=string.Concat(st1, st2);11. C#工具箱中放的是(C )A.都是控件 B. 都是组件 C.有控件,也有组件12. 控件类Button的Text
4、是( C)A. private变量 B. public变量 C. 属性 13. 在ADO.NET中,用( B)对象进行SQL Server数据库的连接。A.SqlCommand B.SqlConnection C.OleDbConnection 14.SolidBrush的命名空间是( C) A.System.IO B.System.Data 15.NET中的大多数控件派生于( C)类A. System.Data B. System.Windows.Forms 16. 密封类的作用是(C ) A. 作为基类 B. 实现多态性 C. 不被别的类继承17.C#中的类可以多重继承( B)A. 多个基
5、类 B. 多个接口 C. 多个抽象类18.异常可以被 (AB )定义的块捕捉A.catch B.try C.finally 19.C#中的纯虚函数是用(B )来定义的函数A.virtual B.abstract C.override D.sealed20.C#中的.NET组件是指 ( B)A.Com组件 B.CLR组件 C. 控件二、名词解释,并简要描述其作用(每题3分,共21分)1. IL 2.JIT 3. CLR 4. GDI+ 5.事件 6.委托 7. out和ref 三、改错题(代码有多处错,请指出并改正,要求不能违背题目原意)1. 定义一double数组A, 赋值,并打印. (有3处
6、错,每错改正2分,共6分)double A= new double100;for(int i=0; i<100; i+) Ai = i/100.0;foreach(int a in A) Console.WriteLine(“%d”, a);2. 代码取出Access2003的数据库c:sutdent.mdb中sutdent表的第一条记录, 并打印Name字段的值。 (有5处错,每错改正2分,共10分)string strcon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:Student.mdb" OleDbCo
7、nnection myConnection = new OleDbConnection(strcon); SqlCommand myCommand = myCommand.CreateCommand(); myCommand.CommandText = "select * from Student" OleDbDataReader myDataReader = myCommand.ExecuteReader(); myDataReader.Read(); myDataReader.Read(); Console.WriteLine(myDataReader"Nam
8、e"); myDataReader.Close();四编程题:(有1小题,共10分)定义一个接口IShape:public interface IShape int Side get; set; / 边长的get/set方法double Area(); / 求面积的函数请写一个正方形类Square,它实现了IShape接口。五问答题:(有5小题,1,2小题每题2分, 3,4,5小题每题3分, 共13分)创建一Windows应用程序,系统定义了一个Form1类;在Form1.cs设计中,从工具箱拖一个Button控件到Form1中去,1. 系统在Form1类中定义了什么?用语句表达。2
9、. 系统在Form1类的InitializeComponent()中添加了什么?用语句表达。3. 在Form1.cs设计中双击Button控件,系统在Form1类中定义了函数:private void button1_Click(object sender, EventArgs e) 请在函数体中添加语句,可显示”Hello”字符串。4. 系统如何把button1_Click函数与button1的Click事件进行绑定?用语句表达。5 Button1的Click事件是如何声明的?用语句表达。C#复习资料1 值类型和引用类型A 类型可以分为值类型和引用类型,值类型可以分为结构和枚举,结构又分为整
10、型、浮点型、布尔型、用户自定义类型。引用类型可以分为指针类型、接口类型、类类型、数组类型、委托类型。B 在。Net中类只能单继承,接口可以多继承。C 值类型和引用类型的特点值类型直接包括他们的数据,每个值类型变量都有自己的数据副本,变量之间赋值时采用值复制的方式,他们的实例要放在堆栈上。引用类型存储对值得内存地址的引用,变量之间的赋值采用传递引用的方式,他们位于堆上。D 所有的类型都派生于System。Object基本类型。E 值类型和引用类型的资源回收问题 值类型不受垃圾收集器控制,可以减少托管堆的压力,引用类型内存必须从托管堆中分配,在分配时一些额外的附加成员必须初始化。从托管堆分配的对象
11、可能导致执行垃圾回收。A:C#代码的运行是基于上的B:C#代码编译运行的第一个函数是2 程序集 A他是是一个或者多个托管模块的集合,可以包含资源文件,他是组件复用、实施安全策略和版本策略的最小单位。B 程序集清单(manifest)描述该程序集由哪些部分组成,没有程序集清单的托管PE文件不会被执行C 程序集的作用 是可执行的最小单元,是可授予权限的最小单元,是版本控制的最小容器形成引用范围边界,是基本的部署单元,是支持并行执行的单元.D 程序集的部署方式 私有部署(将程序集直接Copy到某个应用程序的根目录或者子目录中,前提:强命名程序集和弱命名程序集都可以这样部署,优点:部署简单,除了Cop
12、y不需要其他操作,适用场合:程序集没有共享要求时)全局部署(将程序集通过GacUtil命令行工具将程序集部署到全局程序集缓存(Global Assembly Cache)中,或者利用资源管理器转到“WinDirAssembly”目录下,通过拖放方式部署,前提:只有强命名的程序集才可以部署到GAC,优点:可供其他程序集共享使用,缺点:损害简化安装、备份、还原、移动和卸载的部署要求,适用场合:程序集有共享要求时。)最常用的部署方式是私有部署方式,尽量减少或避免对全局环境的影响3 4种修饰符 他们分别是public,private,protected,partial4 数组的下标是从0到n-1数组类
13、型从抽象基类Array派生的引用类型,由于Array实现了IEnumerable接口,因此可以对所有的数组类型使用foreach迭代5 求数组元素个数的方法6 异常处理 在c#中所有的异常处理必须用一个从System.Exception 派生类的类型的是类中表示。异常的产生一个throw语句会直接无条件的抛出一个异常,控制不会接触到进跟在throw后面的语句。异常的处理 异常被try catch语句处理。7 值类型的装箱与拆箱装箱和拆箱操作需要进行大量的计算,装箱时还必须分配并构造一个全新的对象。大量的装箱和拆箱操作是性能杀手,应尽量避免不必要的装箱、拆箱操作装箱:值类型实例到对象的转换。此转
14、换意味着值类型实例在运行时将携带完整的类型信息,并在堆中为其分配空间。通过复制值类型,并将它嵌入到新分配的对象中,将值类型转换为对象装箱操作是隐式的操作拆箱:将装箱后的值类型还原到值类型。确定对象实例是给定值类型的已装箱值,从装箱类型中复制值到值类型变量拆箱操作是显式的操作8 元数据的定义在模块或程序集定义的每个类型和成员都将在元数据中以非特定语言的方式描述 元数据的最大优势就是内臵在被说明的模块或程序集之内9 元数据的内容使一种语言开发的类型可以被另外一种语言所使用,圾收集器(GC)利用元数据确定哪些对象是可达的,isual Studio等开发工具可根据元数据提供智能
15、感知功能以及其他与帮助有关的功能,对象的序列化和反序列化提供支持,他的我们可以利用Arrtibute完成的功能10元数据的举例11 数组的申明以及传递参数声明一维数组:int array = new int5;/从0到4共5个元素,每个元素默认值为0int arrayX= new int51,3,5,7,9;int arrayX= 1,3,5,7,9;int a; a = new int5;/声明与实例化分开则必须通过new操作符注意SomeType stArray= new SomeType3;当SomeType是值类型时 Some
16、Type stArray= new SomeType3;当SomeType是引用类型时二维数组:int, array = new int4,2;三维数组:int, array = new int4,2,3;(详细请参看书上12)12 声明常量的俩个关键字以及他们的区别A 静态成员以static关键字标识,静态成员归类型所有,为所有类型的实例所共享 B 关键字 readonly与constC 区别 const字段只能在该字段的声明中初始化 public const inti=5; read
17、only既可以在声明中初始化,也可以在构造函数中初始化 根据所使用的构造函数,readonly字段可能具有不同的值,const字段为编译时常数,readonly字段可用于运行时常数 public readonlyinth = DateTime.Now.Hour; const属于类型,readonly属于实例13 值类型和引用类型的强制转换以及关键字当需要把值类型按引用传递到某个方法里面去的话,可以使用ref或out关键字public void SetValue(ref StructAa)public void
18、SetValue(out StructAa)使用ref关键字当值类型被传递到被调用方法里之前,必须进行初始化使用out关键字 当值类型被传递到被调用方法里之前,可以不用初始化,但在被调用方法面必须被初始化14 委托15 结构的继承、委托的调用和累的生命的有关问题A 类及其成员通过class关键字定义一个类,类可以包含字段、属性、方法、事件等,统称为类的成员类定义对象的类型,对象是类的具体实体,对象有时也称为实例,通过new关键字实例化和初始化类的对象:类只能从一个基类继承,但可以同时实现多个接口Customer cus= new Customer();Customer anotherCus=
19、new Customer(“CusName”);B 结构public structAddress/字段、属性、方法、事件结构的静态字段可以初始化,但结构的实例字段不能使用初始值设定结构不能声明默认构造函数或析构函数,但是可以声明带有参数的构造函数C 结构的特点结构的副本由编译器自动创建和销毁,因此不需要使用默认构造函数和析构函数,编译器通过为所有字段赋予默认值来实现默认构造函数,结构不能从类或其他结构继承,也不能作为一个类的基类型,结构是值类型,而类是引用类型,结构实例化可以不是用new运算符。结构可以实现接口,在结构中初始化实例字段是错误的。18委托和事件19 Main方法 C#为纯面向对象
20、语言,任何方法都必须作为某个类型的成员方法,Main方法必须作为类或者结构内的静态方法,一个C#程序中只能有一个入口点(Main方法)。20 Main方法的签名 static void Main() static intMain() static void Main(string args) static intMain(string args)。21 System.Console类进行控制台的操作,包括输入、输出等操作 Console类的部分方法 Console.WriteConsole.WriteLine Console.Read Console.ReadLine22 基元类型 编译器直接
21、支持的数据类型称为基元类型(primitive type)System.Int32 a = new System.Int32();inta=023 基元类型与FCL中的类型直接映射int System.Int32 long System.Int64 float System.Single object System.Object string System.String24 使用checked/unchecked的原则如果希望出现溢出时抛出异常,则应该显式使用checked操作符或checked语句如果希望即使出现了溢出,也不希望有异常抛出,则应该显式使用unchecked。如果不使用chec
22、ked/unchecked,则表明应用程序在开发阶段希望溢出时能够抛出异常,而在发布后,不再做溢出检查25 类型引用的方式 类型引用完全限定名称:命名空间.类型名称比如:System.Console.WriteLine(“Hello”);可以使用using简化类型的引用 using System; Console.WriteLine(“Hello”);26 实例化与初始化实例化 为对象等分配存放值数据内存空间初始化 为对象等的内容进行初始设置new运算符通常先执行实例化,再执行初始化对于值类型,如果只是声明了变量但没有使用new运算符,则默认实现了实例化,但是没有执行初始化对于引用类型,如果只
23、声明了变量但没有使用new运算符,则既没有实例化,也没有初始化27 类型转换作为强类型语言,不同类型直接赋值必须进行类型转换隐式转换:小类型转换为大类型,比如short转换为int子类型转换为父类型,比如SqlConnection转换为DbConnection实现接口的类型转换为对应的接口类型,比如SqlDataReader转换为IDataReader显式转换大类型转换为小类型,比如int转换为short整数类型转换为枚举值,比如WeekDaywd = (WeekDay)2;父类型或者接口类型指向的具体类型还原为具体类型引用,比如:DbConnectionconnect=new SqlConn
24、ection();SqlConnectionsqlConnect= connect as SqlConnection; 1.比较传统开发模式下和.NET平台下开发程序有什么不同? NET开发平台使得开发者创建运行在Internet Information Server (IIS)(互联网信息服务器)Web服务器上的Web应用程序更为容易,它也使创建稳定、可靠而又安全的Windows桌面应用程序更为容易。托管执行。2. 如何理解C#中string类型所具有的“恒定性”?我们一旦创建了一个string,在堆上为他分配了一块连续的内存空间,我们将不能以任何方式对这个string进行修改使之变长、变短、改变格式。所有对这个string进行各项操作而返回的string,实际上另一个重新创建的string。3.请举例说明:(1)什么C#中值类型和引用类型(2)各自有什么特 值类型: 单元直接存放“有效值” 如: int a=3; 则a内存单元就放的是3 引用类型: 单元放的是另外一个对象的引用(地址) 如: Form form1=new Form(); 就是说,在内存中开辟了一个对象new Form(),form1内存单元存放的是那个对象的地址,并非对象本身4.举
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论