DOTNET试题C#基础参考答案.pdf_第1页
DOTNET试题C#基础参考答案.pdf_第2页
DOTNET试题C#基础参考答案.pdf_第3页
DOTNET试题C#基础参考答案.pdf_第4页
DOTNET试题C#基础参考答案.pdf_第5页
已阅读5页,还剩6页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

单选题(每个单选题(每个 2 分,共分,共 10 分)分) 一、运行下面程序 using System; namespace test abstract class BaseClass public virtual void MethodA() Console.WriteLine(“BaseClass“); public virtual void MethodB() class Class1 : BaseClass public void MethodA() Console.WriteLine(“Class1“); public override void MethodB() class Class2 : Class1 new public void MethodB() class MainClass public static void Main(string args) Class2 o = new Class2(); o.MethodA(); 请问,此程序输出结果是: 1. BaseClass 2. BassClass Class1 3. Class1 4. Class1 BassClass 这个程序的运行结果是“Class1” ,原因如下:o 为 class2 的实例对象,调用的是 methodA() 这个方法,而这个方法在 class2 的类体里面没有重写,所以会执行其基类 class1 里面的 methodA()方法,输出“Class1” 。 二、运行下面程序 public static void Main(string args) int i = 2000; object o = i; i = 2001; int j =(int) o; Console.WriteLine(“i=0,o=1, j=2“,i,o,j); 请问,程序输出结果: 1. i=2001,o=2000,j=2000 2. i=2001,o=2001,j=2001 3. i=2000,o=2001,j=2000 4. i=2001,o=2000,j=2001 这个题的运行结果为:i=2001,o=2000,j=2000,原因如下:i 的初值为 2000,然后将 i 进行装 箱操作,这个 o 的值为 2000,再将 i 重新赋值为 2001,再进行拆箱操作,这样 j 的值为 2000, 所以最后 i=2001,o=2000,j=2000 三、如下程序的运行结果是: using System; namespace test public abstract class A public A() Console.WriteLine(A); public virtual void Fun() Console.WriteLine(“A.Fun()“); public class B : A public B() Console.WriteLine(B); public new void Fun() Console.WriteLine(“B.Fun()“); public static void Main() A a = new B(); a.Fun(); Console.ReadLine(); 1.AB A.Fun() 2.AB B.Fun() 3. BAA.Fun() 4. BA B.Fun() 这个题的结果是 AB A.Fun(),原因如下:B 继承于 A,所以这行语句“A a = new B();”表 示将子类转换为基类,会先执行基类的构造函数,即 A 类的构造函数,再执行 B 的构造函 数,这样会先打印“A” ,再输出“B” ,然后执行这条语句:a.Fun();,因为 B 里面的改写 的方法 Fun(),是用 NEW 作标记的,这样的在调用的时候,会调用其基类的 Fun(),输出 “A.Fun()”。 四、 Which of these string definitions will prevent escaping on backslashes in C#?* 1. string s = #”n Test string”; 2. string s = “n Test string”; 3. string s = ”n Test string”; 4. string s = “n Test string”; 答案是 3 ,任何字符串前加符号都表示里面内容原样输出,不转义。 五、 声明一个委托 public delegate int myCallBack(int x); 则用该委托产生的回调方法的原型 应该是 1. void myCallBack(int x) 2. int receive(int num) 3. string receive(int x) 4. 不确定的 答案是是 2 分析如下:委托的原型为 public delegate int myCallBack(int x);则表示回调方法的返回类 型应该是 int 型的,还应带有一个 int 型的参数,根据这个分析,只有 int receive(int num) 这个原型最符合。 填空题(每个空填空题(每个空 1 分,共分,共 10 分)分) 1.float f=-123.567F; int i=(int)f;i 的值现在是_123_? 2.面向对象的语言具有_继承_性、_封装_性、_多态_性 3.类成员有_种可访问形式? this.;new Class().Method;静态 4.委托声明的关键字是_delegate_? 5.在.Net 托管代码中我们不用担心内存漏洞,这是因为有了_垃圾收集器_? 6.当类 T 只声明了私有实例构造函数时, 则在 T 的程序文本外部, _不可以_(可以 or 不 可以)从 T 派生出新的类,_不可以_(可以 or 不可以)直接创建 T 的任何实例。 7.能用 foreach 遍历访问的对象需要实现 _IEnumerable_接口。 指错题(每个指错题(每个 2 分,共分,共 6 分)分) 1.下面这段代码有两处错误,请指出。 switch (i) case(): /这个地方必须有一个整数或是枚举值 CaseZero(); break; case 1: CaseOne(); break; case 2: dufault; /对于 default 而言,写法应该是这样的 default: CaseTwo(); break; 2.下面的代码中有什么错误吗? using System; class A public virtual void F() Console.WriteLine(“A.F“); abstract class B:A public abstract override void F();/重写基类的方法,应该用 override 或是 new / new public abstract void F(); 解析如下:就针对代码而言没有什么错误,但是一个抽象类,派生于一个非抽象类, 这听起来就有点不习惯,在抽象类中,可以有抽象方法,也可以有非抽象方法,对于抽象方 法而言,本身没有具体的实现代码,有的只是签名而已,因为抽象类本就是用来被派生的, 而不是派生于别的类。 而且抽象类不能被实例化, 所以上面的类 B, 就其应用而言是个废类, 没有用处。 3.public static const int A=1;这段代码有错误么?是什么? static 和 const 不能同时修饰一个变量。 简答题(每个简答题(每个 2 分,共分,共 62 分)分) 1.什么叫应用程序域?什么是强类型系统?什么是重载?CTS、 CLS 和 CLR 分别作何解释? 答:应用程序域:操作系统和运行库环境通常会在应用程序间提供某种形式的隔离。例如, Microsoft Windows 使用进程来隔离应用程序。 为确保在一个应用程序中运行的代码不会对其他 不相关的应用程序产生不良影响,这种隔离是必需的。应用程序域为安全性、可靠性、版本控制 以及卸载程序集提供了隔离边界。 应用程序域通常由运行库宿主创建, 运行库宿主负责在运行应 用程序之前引导公共语言运行库。 托管代码:使用基于公共语言运行库的语言编译器开发的代码称为托管代码。 强类型系统: 所有的变量都清晰地标记为属于某个特定的数据类型, 不允许对模糊的数据类 型执行任何操作。 装箱和拆箱:装箱使值类型能够被视为对象。 对值类型装箱将把该值类型打包到 Object 引用类 型的一个实例中。这使得值类型可以存储到堆中。拆箱将从对象从堆中转换为栈值类型。 重载:成员的签名包含成员的名称和参数列表。每个成员签名在类型中必须是唯一的。只要成员 的参数列表不同,成员的名称可以相同。如果类型的两个或多个成员是同类成员(方法、属性、 构造函数等) ,它们具有相同的名称和不同的参数列表,则称该同类成员进行了重载。 CTS:通用类型系统,common type system CLS:通用语言规范 common language specification CLR:通用语言运行时 common language runtime 2.什么是装箱和拆箱? 答案:装箱和拆箱:装箱使值类型能够被视为对象。对值类型装箱将把该值类型打包到 Object 引用类型的一个实例中。这使得值类型可以存储到堆中。拆箱将从对象从堆中转换为栈值类型。 重载:成员的签名包含成员的名称和参数列表。每个成员签名在类型中必须是唯一的。只要成员 的参数列表不同,成员的名称可以相同。如果类型的两个或多个成员是同类成员(方法、属性、 构造函数等) ,它们具有相同的名称和不同的参数列表,则称该同类成员进行了重载。 3.什么是受管制的代码? 答案:托管代码:使用基于公共语言运行库的语言编译器开发的代码称为托管代码。 4.值类型和引用类型的区别?写出 C#的样例代码。 对于值类型,变量直接保存其数据,而对于引用类型,栈变量仅保存地址,对应的数据可以在该 地址中找到。 值类型:int a=100; 引用类型:Class AAAA newAA=new AA(); 5、请指出 C#中是否有下列关键字? 答案:virtual、sealed、abstract、import、as、in、goto、final、Const、signed、String(提示, 仅指出 C#中没有的即可) 。 C#中没有的有:import,final,signed 6、在循环:for( int i = 0; i 100?b-100:b); 9, Public double thisuint i Get Return Abci; Set Abci=value; 只要定义好之后,可以根据很多东西来索引,比如字符串。等等。 27.GC 是什么? 为什么要有 GC? GC 控制系统垃圾回收器(一种自动回收未使用内存的服务) 。 因为没有引用的对象存放在堆中,需要进行垃圾回收。 28.C#可否对内存进行直接的操作? 可以,但是要声明为 unsafe。 29.C#中 property 与 attribute 的区别,他们各有什么用处,这种机制的好处在哪里? Property 和 attribute 都是讲属性,但 attribute 翻译为特性,而且特性一旦与程序实体关联, 便能在运行时使用一种叫“反射”的技术对特性进行查询,这种 attribute 使得对于类成员的 描述更加细致,可以在程序运行时对它进行读取,以便下一步的操作,反映了反射是一种动 态自我描述,自我检测,自我完善的一种技术。 30.进程和线程分别怎么理解? 一个进程可是包含多个线程。 31. sleep() 和 wait() 有什么区别? sleep()方法是使线程停止一段时间的方法。Sleep 是线程自我调用的一种方式,而 wait 是用于线程并发的时候的一种处理机制。Wait 是通过 monitor 对象自动调用的,如果线程 对一个同步对象 x 发出一个 wait()调用,该线程会暂停执行,被调对象进入等待状态,直 到被唤醒或等待时间到。 编程题(每个编程题(每个 4 分,共分,共 12 分)分) 1.请编程实现一个冒泡排序算法? int array = new int10; int temp = 0; for (int i = 0; i array.Length; i+) for (int j = i + 1; j array.Length; j+) if (arrayj arrayi) temp = arrayi; arrayi = arrayj; arrayj = temp; 2.求以下表达式的值,写出您想到的一种或几种实现方法: 1-2+3-4+m 速算:方法 1:-1*50=-50; 计算机算法:方法 2:计算 1 到 M 的累加和,如果是偶数数,则取反。 int Num = Convert.ToInt32(Console.ReadLine(); int Sum = 0; for (int i = 0; i Num + 1; i+) if (i % 2) = 1)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论