当前位置:文档之家› net考试题答案

net考试题答案

一、填空题:1. CLR直接打交道的对象是程序集。

2. IL是一种基于汇编的语言。

3. 一个托管PE文件包含4部分:PE表头,CLR表头,元数据,IL代码4. 元数据表划分为3大类:定义表引用表、和清单表。

5. 所有类型的基类型是 object 。

6. 对象克隆有两种方式是浅拷贝和深拷贝7. float f=-123.567F;int i=(int)f;i的值现在是_ -123 ___。

8. .NET 中提供了三种模式来回收内存资源:dispose模式,finalize方法,close方法9. 委托声明的关键字是___ delegate __。

10. CLR托管堆只支持 3 个代龄: 0,1,2 ,初始化时,为它们分配的阙值容量分别是:256KB,2MB,10MB二、选择题:1. 下列选项中,( c)是引用类型。

a)enum类型 b)struct类型 c)string类型 d)int类型2. 下列关于构造函数的描述正确的是( c)a)构造函数可以声明返回类型b)构造函数不可以用private修饰c)构造函数必须与类名相同d)构造函数不能带参数3. 装箱、拆箱操作发生在: ( c )a)类与对象之间 b)对象与对象之间c)引用类型与值类型之间 d)引用类型与引用类型之间4. 装箱与拆箱操作是否是互逆的操作?( b)a)是 b)否5. 用户自定义异常类需要从以下哪个类继承:( c )a)Exception b)CustomExceptionc)ApplicationException d)BaseException6. .Net依赖以下哪项技术实现跨语言互用性。

(c )a)CLR b)CTS c)CLS d)CTT7.“访问范围限定于此程序或那些由它所属的类派生的类型”是对以下哪个成员可访问性含义的正确描述?(d )a)public b)protected c)internal d)protected internal8. class Class1{private static int count = 0;static Class1(){ count++; }public Class1(){ count++; }}Class1 o1 = new Class1();Class1 o2 = new Class1();请问,o1.Count的值是多少?(c )a)1 b)2 c)3 d)49. 以下哪个类是int的基类。

( b )a)Int32 b)Object c)ValueType d)Int1610.C#编译器认为自定义的所有委托类型都派生自:(b )a)Delegate b)MulticastDelegate三、判断下面代码是否正确并说明原因。

1. public static const int A=1;错误,static 和const 不能同时用来修饰一个类型2. Byte b = 100;b = (Byte) (b + 200) ;错误;byte类型的的取值范围是0~2553. 下面代码是否正确,为什么?(1) struct SomeValType{ Int32 x = 5; }错误:因为C#不允许值类型有无参构造器,在编译时会出错:结构中不能有实例字段初始值设定项(2) struct SomeValType{ Int32 x,y;public SomeValType(Int32 x) { this.x = x;}}错误:y没有被初始化,C#编译器抛出错误:。

在控制离开构造器前,字段SomeValType.y必须完全赋值(3)class SomeType{ static Int32 x = 5; }正确(4)struct SomeValType{ static Int32 x = 5; }正确4. using System;class A{public virtual void F() {Console.WriteLine("A.F");}}abstract class B:A{ public abstract override void F(); }四、简答题:(任选五题)1. CLR和FCL允许开发人员创建的几种应用程序。

●XML Web服务●Web窗体●Windows窗体●Windows控制台应用程序●Window服务●组件库2. 把一个源代码文件生成CUI可执行文件、GUI可执行文件、DLL文件分别用到的命令行开关。

3. 利用operator声明且仅声明了= =,有什么错误么? 如果有,说明原因。

答:要同时修改Equale和GetHash() ? 重载了"==" 就必须重载"!="4. 例举System.Object 类提供的几个公有实例方法。

1--Equals:如果两个对象具有相同的值,返回true;2--GetHashCode: 返回对象的值的散列码。

3--ToString: 默认情况下返回类型的完全限定名。

一般自定义类型中要重写该方法,返回有意义的字符串;4--GetType: 返回一个类型为继承自Type的对象实例,返回的Type对象和反射类一起来获得元数据信5. CLR支持的两种类型以及它们的内存分配方式?弱命名程序集和强命名程序集.NET Framework 的垃圾回收器管理应用程序的内存分配和释放。

每次使用new 运算符创建对象时,运行库都从托管堆为该对象分配内存。

只要托管堆中有地址空间可用,运行库就会继续为新对象分配空间。

6.实现自己的 Equals 方法时,必须确保它遵循的规则。

∙Equals方法必须是自反的,就是说,x.Equals(x)必须返回true;∙Equals方法必须是对称的,就是说,x.Equals(y)和y.Equals(x)必须返回同样的值;∙Equals方法必须是可传递的,就是说,x.Equals(y)和y.Equals(z)都返回true,那么x.Equals(z)也必须返回true;∙Equals方法必须是前后一致的,就是说,如果两个对象的值没有发生变化,那么多次调用Equals方法的返回值应该相同7.定义一个属性时,编译器会在生成的托管模块中产生哪3项?1. 一个表示属性的get访问器的方法。

只有在为属性定义了get访问器方法时,才有这一项。

2.一个表示属性的set访问器的方法。

只有在为属性定义了set访问器方法时,才有这一项。

3. 一个位于托管模块元数据中的属性的定义,不管是只读,只写,或者读写属性都有这一项。

8. 用sealed修饰的类有什么特点?不能被继承9. 如何理解委托?委托类似于函数指针,但函数指针只能引用静态方法,而委托既能引用静态方法,也能引用实例方法。

事件和处理方法之间是怎么联系起来的呢?委托就是他们中间的桥梁,事件发生时,委托会知道,然后将事件传递给处理方法,处理方法进行相应处理10. 如何理解.net中的垃圾回收机制?NET中的垃圾回收机制是引用程序对内存的回收和释放。

当每次用new关键字创建一个对象时,运行库都要从托管堆中为其分配内存,因为空间是有限的,最终垃圾回收机制是要回收不用的内存的。

已释放内存,重新使用。

五、1.public static void Main ( ) {Int32 v = 5 ;Object o = v ;v = 123 ;Console.WriteLine ( v + “,” + (Int32) o ) ;}这段代码中有 1 次装箱操作。

2.假设存在以下两个类定义:class B { Int32 x ; }class D :B { Int32 y ;}(1)System.Object o1 = new System.Object();(2)System.Object o2 = new B();(3)System.Object o3 = new D();(4)System.Object o4 = o3;(5)B b1 = new B();(6)B b2 = new D();(7)D d1 = new D();(8)B b3 = new System.Object();(9)D d3 = new System.Object();(10)B b4 = d1;(11)D d2 = b2;(12)D d4 = (D) d1;(13)D d5 = (D) b2;(14)D d6 = (D) b1;(15)B b5 = (B) o1;(16)B b6 = (D) b2;以上代码,能正确编译和运行的是:1,2,3,4,5,6,7,10,12,13,14,15 。

导致编译时出错的是: 16 。

导致运行时出错的是: 8,9,11 。

3.写出程序的输出结果(选作)class Class1 {private string str = "Class1.str";private int i = 0;static void StringConvert(string str){ str = "string being converted."; }static void StringConvert(Class1 c){ c.str = "string being converted."; }static void Add(int i){ i++; }static void AddWithRef(ref int i){ i++; }static void Main() {int i1 = 10;int i2 = 20;string str = "str";Class1 c = new Class1();Add(i1);AddWithRef(ref i2);Add(c.i);StringConvert(str); StringConvert(c);Console.WriteLine(i1);Console.WriteLine(i2);Console.WriteLine(c.i);Console.WriteLine(str);Console.WriteLine(c.str); }}结果:1021Strstring being converted4. 写出程序的输出结果(选作)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();}}结果:ABA.Fun()5. 写出程序的输出结果:(选作)public class A{public virtual void Fun1(int i){ Console.WriteLine(i); } public void Fun2(A a){ a.Fun1(1);Fun1(5);}}public class B : A{public override void Fun1(int i) { base.Fun1 (i + 1); }public static void Main(){B b = new B();A a = new A();a.Fun2(b);b.Fun2(a); }}结果:2156。

相关主题