合肥工业大学版net题库.docx
《合肥工业大学版net题库.docx》由会员分享,可在线阅读,更多相关《合肥工业大学版net题库.docx(33页珍藏版)》请在冰豆网上搜索。
![合肥工业大学版net题库.docx](https://file1.bdocx.com/fileroot1/2023-5/25/fefbe88a-e02e-4c1e-bdcb-c1277fce44d6/fefbe88a-e02e-4c1e-bdcb-c1277fce44d61.gif)
合肥工业大学版net题库
一、填空
1、以公共运行时(CLR)为目标的代码称为托管代码
2、CLR中的自动内存管理功能技术称为垃圾回收
3、CLR通过通用类型系统(CTS),实现严格的类型和代码验证,
4、可移植可执行文件(PE)包含元数据和以Microsoft中介语言(MSIL)形式存在的代码
5、程序集构成了部署,版本控制,重复使用,激活范围控制和安全权限的基本单元
6、类型System.Collection.Anaylist的命名空间为System.Collections
7、CLR中应用程序域可提供与独立进程间等隔离级别,
8、bool类型的别名是System.Boolean
9、语句typeof(bool)的运行结果是:
System.Boolean
10、NETFramwork中的所有类均从Object派生
11、所有值类型均隐式派生自System.ValueType
12、C是可为null的int型变量,语句intd=c?
?
-1,的含义是:
c为空d等于-1否则d等于c
13、在不安全的上下文中,类型可以是指针类型,值类型和引用类型。
14、String对象是不可变的,如果要修改字符串而不创建新的对象,则可以使用System.Text.StringBuilder类
15、多态,封装和继承是面向对象编程的三大支柱。
16、声明抽象类和抽象方法的关键字是abstract
17、声明分部类和分部方法的关键字是partial
18、修饰符internal限定类型或成员只能被同一程序集中的任何代码访问
19、修饰符protectedintemal限定类型或成员可被同一集中的任何代码或其他程序集中的任何派生类访问
1、基类中虚方法(virtual)可以被派生类重写或覆盖,重写或覆盖需使用关键字:
override
2、System.Object类是C#所有类的基类或根
3、C#中一个类可以继承多个接口,但只能有一个基类
4、在C#中数据类型有两类,引用类型和值类型
5、值类型存在堆栈中,引用类型存储在托管内存中的堆(内存)
6、值类型转换为object类型或其派生类型,称为装箱,反之称为拆箱
7、在C#中实现循环的语句有fordo-whatwhile和foreach
8、在C#中实现异常处理的语句有trycatch和finally
9、语句using.System的作用是导入命名空间
10、在C#中有一维,多维和交错数组,语句“char[][]A1”表示A1是交错数组
11、属性提供一种灵活的机制实现对类私有字段的读写,本质上是公共方法,它使用的访问器有get和set,只读属性将没有set访问器
12、运算符is和as与引用类型转换相关,其中运算符
is:
检查对象是否与给定的类型兼容
as:
用于检查在兼容的引用类型之间执行某些类型的转换
选择(注意选项不一定和题库一样!
!
!
题号加问号的不太确定)
1.System.String是引用和类型
3.数组类型为System.Array,
A.数组作为ref关键字声明的参数传递时,数组必须在调用前在方法外部实现明确赋值,在方法内部对数组所做的任何参数,包括用new重建数组,都将反映到原先数组上(√)
B.数组作为out关键字声明的参数传递时,数组必须在方法外部明确赋值,在方法内部对数组所做的任何修改,也将反映到原先的数组上(×)//out传递参数时不需要事先初始化,但必须在方法中初始化
C.pararns允许指定一个方法的参数的数量是可变化的,在调用时给定参数个数(√)
D.数组作为in关键字声明的参数传递时,向方法提供位于托管堆的数组内存对象,在方法内部使用new重建数组参数时,程序将分配位于托管堆的另外一个位置用于存储创建的数组参数对象,而不是指向原有的托管堆内存位置(?
)课件太多没找到
//对于泛型类型参数,in关键字指定该类型参数是逆变的。
可以在泛型接口和委托中使用in关键字
4、关于迭代器说法错误的是()
A、迭代器是返回相同类型的有序数值序列的一段代码(√)
B、迭代器可用作方法、运算符或get访问器的代码体。
(√)
C、迭代器使用yieldbreak语句一次返回每个元素,用yieldreturn结束迭代(×)//反了!
!
!
D、可以在类中实现多个迭代器。
每个迭代器都必须像任何类成员一样有唯一的名称,并且可以在foreach语句中被客户端代码调用(√)
E、迭代器的返回类型必须为IteratorEnumerable,IEnumerator,IEnumerablet(T)或IEnumerator(T)(×)//IteratorEnumerable应该为IEnumerable
5、关于as运算符说法错误的是()
A、as运算符是一种类型转换符,用来在两个引用类型的对象之间进行类型转换,如果转换失败将转换为null(√)
B、as运算符之后可以是值类型数据,即该运算符支持值类型对象的转换,不会引起编辑错误(×)//as运算符之后不被不能是值类型数据类型,即该运算符不支持值类型对象的转换,否则将会引起编辑错误。
C、as运算符支持类型数据到object类型的转换,这时对值类型遍历进行的是一个装箱操作错误(√)
D、as运算符用于引用类型的转换盒值类型的装箱,转换失败时,将转换为null,而不会引发异常(√)
E、as运算符不能用于自定义的类型转换,当需要进行用户自定义的转换时,应使用cast来转换(√)
6、C#中用于声明匿名类型的关键字是()
A、varB、dynamicC、objectD、params
7、选出下面程序段中的错误语句()
DecimalmyMoney=99.9m;
doublex=(double)myMoney;
A、myMoney=(decimal)x
B、myMoney=300
C、decimalxx=myMoney+x(×)//错误1运算符“+”无法应用于“decimal”和“double”类型的操作数
D、decimalxx=myMoney+300
8.选出下面程序段中会引发异常的语句
Inti=123
A.objecto=i
B.objecto1=(object)i
i=456
C.intj=(int)o
D.intj=(short)o
//选项有点乱反正是D错了,未处理System.InvalidCastException
Message=指定的转换无效。
9、试选出错误的语句()
A、double?
d1=null
B、boolflag=null(×)//加问号!
C、charletter=‘a’
D、int?
[]arr=newint?
[10]
?
10.在下列程序段中,绝对不会出现编译错误和运行异常的语句为
Int?
n=null
A.intm1=n(×)//缺少强制转换
B.intm2=(int)n;(×)//null强制转成int有问题
C.intm3=nValue;(?
)//没看明白,应该抄错了
intb=10;
D.int?
n2=n;(√)
?
11、试从下面程序段中选出有语法错误的语句()
Bool?
b=false
A、objectbBoxed=b
B、boolb2=(bool)bBoxed
C、if(b==null){}
D、if(bBoxed==null){}
//执行过了都对……应该只有D可能有问题
12、关于结构,说法正确的是;
A、结构是轻量级类,故它是引用类型(×)//值类型
B、结构中可声明无参构造函数(×)//只能声明有参构造函数
C、结构声明中允许对结构成员直接初始化实例字段(×)//不可以,只能在构造函数中初始化
D、结构不能继承和派生,但可以实现接口(√)
E、必须使用new关键字来创造结构实例(×)//可以不使用,但是各字段保持未赋值状态,对象不可被使用
F、结构不能用作为NULL类型,不能赋NULL值(×)//可以~
13、试从下面程序段中选出违反默认约定的语句
enumDays{Sun,Mon,Tue,Wed,Thu,Fir,Sat};
A.inty=(int)Days.Fir
B.Days.meetingDay={Days}42(×)//错了没有对的理由,枚举里面找不到42
C.enumRange:
long{Max=2147483648L,Min=255L};
D.longx=(long)Range.Max;
14、从下面选项中选择错误的()
A、dymatic类型对象会绕过静态类型检查,编译时被假定支持任何操作,改为在运行时解析这些操作(√)
B、类型dynamic只在编译时存在,运行时不存在(√)
C、var本身不是类型,只是告诉编译器该变量类型需要推断(√)
D、var[]a=new[]{1,10,100,1000}(×)//无法将类型“int[]”隐式转换为“var[]”
15、下面关于异常处理描述错误的是()
A、各种类型的异常最终都是由System.Exception派生而来(√)
B、try块后跟一个或多个catch子句,这些子句按特定程度由低到高顺序排列。
(×)//由高到低
C、无论是否引发异常,finally块始终会执行,常用释放资源(√)
D、在可能引发异常的语句周围使用try块,一旦try块中发生异常,控制流将跳转到第一个关联的异常处理程序,如果给定异常没有异常处理程序,则程序将停止执行,并像是一条错误信息。
(√)
E、在catch块中可使用throw语句再次引发已由catch语句捕获的异常,也可引发新异常。
(√)
16、与stringempty相等的是()
A、null
B、””
C、’’
D、”“
17、关于ref参数和out参数,说法错误的是()
A、ref关键字声明的参数传递,参数必须在调用前在方法外的事先明确赋值(√)
B、out关键字声明参数传递,参数必须在方法内部明确赋值(√)
C、方法内部对参数所作的任何修改,都将反映到原先的参数上(√)
D、在方法的声明中需显示加上ref和out,能在调用语句中省略(错)//当然不可省略
18、下面关于虚方法说法错误的是()
A、虚方法允许您以统一方式处理多组相关的对象(√)
B、virtual关键字用于修饰方法、属性、索引器或事件声明,派生类可重写它们(√)
C、virtual修饰符不能与static,abstract,private或override修饰符一起使用(√)
D、根据对象的运行时类型,确定使用虚方法的哪个版本,实现静态多态(×)
//确定使用替换方法的哪个版本(猜的不确定)
19、关于override和new修饰符,说法错误的是()
A、重写方法与原方法匿名必然相同,签名含修饰符(√)
B、重写的基类方法或属性必须是virtual,abstract,或override的(√)
C、不能使用new,static或virtual修饰符来修饰override方法(√)
D、除非sealedoverride修饰来停止虚拟继承,虚拟成员将永远都是虚拟的(×)//派生类就可以通过使用override关键字来重写事件行为。
//重写虚属性的属性还可以是sealed的,这表示它对派生类不再是虚拟的。
20、关于抽象类和方法,说法错误的是()
A、abstract修饰符可用于类,方法,属性,索引器和事件(√)
B、抽象类可以用来创建实例(×)//不可以
C、不能用sealed修饰符来修饰抽象类(√)
D、抽象方法是隐式的虚方法,只允许在抽象类中使用抽象方法声明(√)
E、声明时不能有实现,即抽象方法没有抽象类版本,而虚方法可有声明类版本(√)
F、从抽象类派生的非抽象类必须实现集成的所有抽象方法和抽象访问器(√)
21、下面代码中执行基类构造函数的语句是()
PublicclassBaseClass
{publicBaseClass(){}
PublicvirtualvoidGetInfo(){}
}
PublicclassDerivedClass:
BaseClass
{publicstringname;}
A、publicDerivedClass:
base()
{}
//下面的几个选项有点乱,反正A是对的
B、publicDerivedClass(stringname):
this()
{thisname=name}
PublicoverridevoidGetInfo()
C、{base(intInfo()
D、Testtt:
stringstr=ttoutput(this)}
}
ClassTest
{publicstaticstringoutput(DerivedClassE)
{returnEname}
}
?
22、关于using语句确保资源释放的语句()
A、usingProject=PC.MyCompany.Project;
B、usingSystem.Text;
C、usingAlicasToMyCompanyProject=NAmeSpacilMyClass
D、usingSystemTest
E、using(Fontfont1=newFont("Arial",10.0f)){bytecharset=fond1.GdiCharset;}
//using会自动销毁using后面括号里创建的对象,而不是{}间的对象
//查看using的用法
23、关于const和readonly说法错误的是()
A、只有内置类型(System.Object除外)可声明为const(√)
B、C#不支持const方法,属性或事件(√)
C、不允许在常量声明中使用static修饰符(√)
D、引用类型常量的可能值为string和null(√)
E、常量和readonly字段一样,可以在声明或构造函数中初始化(×)//const声明时同时初始化,readonly可以声明时初始化,还可以在构造函数中初始化
F、const字段是编译时常量,readonly字段可用于运行时常量(√)
24、关于析构说法错误的是()
A、析构函数用于创建类的实例(×)//在销毁类实例的时候,程序将自动调用析构函数,释放当前实例占用的托管内存。
B、不能在结构中定义析构函数,只能对类使用析构函数(√)
C、一个类只能有一个析构函数(√)
D、无法继承或重载析构函数(×)//在父类中定义的析构函数,同时被子类继承
E、无法调用析构函数,它们是被自动调用的(√)
F、析构函数既没有修饰符也,也没有参数(√)//还没有返回类型
25、关于构造函数说法错误的是()
A、静态构造函数用于初始化静态数据,没有访问修饰符和参数,自动调用(√)
B、默认构造函数有参数(×)//无参数
C、实例构造函数用于创建实例(√)
D、私有构造函数常用于阻止类被继承(√)
E、拷贝构造函数用于同类型对象间的复制(√)
26、关于静态类和方法说法错误的是()
A、静态类仅包含静态成员,是密封的,不能包含实例构造函数,但可实例化(×)//静态类只能包含静态成员,不能使用new关键字进行实例化。
在程序加载时,静态类的一个副本将加载到内存中,可通过类名称访问该类的成员。
类和结构都可以包含静态成员
B、类和静态类可以有静态构造函数(√)
C、静态成员不能访问非静态成员,除非在方法参数中显示传递(√)
D、无论对一个类创造多少实例,它的静态成员都只有一个副本(√)
E、静态方法可以被重载但不可以被重写(√)
F、不可以使用this来引用静态方法或属性访问器(√)
27.关于属性的描述
A.接口中的属性有方法体(×)//没有方法体……
B.自动实现的属性不需要指定对应的私有字段,但需同时声明get和set访问器(√)
C.仅当属性或索引器同时get和set访问器时,才允许对其中一个访问器使用修饰符(√)
D.派生类重写基类的属性,须保持访问器的可访问级别的一致(√)
E.如实现仅有一个访问器的接口时,另一个访问器的实现可有访问修饰符(√)
F.实现接口中的访问器不能有访问修饰符(√)
//这几个正确的选项在课件上应该都有,我没找到……
28.关于嵌套类型(课件上的一些知识点)
在类或结构内部定义的类型称为嵌套类型。
不管外部类型是类还是结构,嵌套类型均默认为private,但是可以设置为public、protectedinternal、protected、internal或private。
嵌套类型(或内部类型)可访问包含类型(或外部类型)。
若要访问包含类型,请将其作为构造函数传递给嵌套类型。
嵌套类型可访问包含类型的私有成员和受保护的成员(包括所有继承的私有成员或受保护的成员)。
29.关于接口
A.接口类似抽象类,任何继承接口的非抽象类型一定要实现接口的所有成员(√)
B.接口可以直接实例化(×)//这句话决定了这个题的难度……
C.接口可以是命名空间或类的成员,可包含方法,属性,索引器和事件,但不具有体。
(√)
D.类和结构可以继承多个接口,接口本身可从一个或多个基接口继承(√)
E.不同接口中的同名方法,为区分需采用显示实现,否则同名方法将采用相同实现(√)
F.当基类型列表包含基类和接口时,基类必须是列表中的第一项(√)
G.显式实现的成员不能通过类实例访问,而只能通过接口实例访问(√)
//具体知识点要看看接口那一章的PPT
30.关于分部类和分部方法,说法错误的是
A.所有部分都必须使用partial关键字,位置紧靠在class,struct或interface前面(√)
B.各部分的可访问性相同(√)
C.某部分的添加某个修饰符,所有部分都具有该修饰符(√)
D.所有部分指定的基类必须一致,忽略基类的部分不能继承(×)//指定基类的所有部分必须一致,但忽略基类的部分仍继承该基类型。
E.各部分可有不同接口,所有部分共享(√)
F.分部方法声明必须以partial开头,并且方法必须返回void(√)
31.#region
……
……
……
#endregion
本语句不考
32.关于类型
A.类可以实现多个接口,但只能有一个基类(√)
B.类是可切分的,分布于不同源文件,称为partialclass(√)
C.静态类只能包含静态成员(√)
D.密封类(sealed修饰)能被其他类继承(×)//不能
E.抽象类可以被继承且能创建对象,可包含方法体(×)//?
谁创建对象,抽象类反正不能
33.关于索引器
A.索引器使对象可以象数组一样被索引(√)
B.使用get和set访问器,索引器使用关键字value赋值(√)//get不清楚,set确定是
C.用this关键字来定义索引器(√)
D.无论你如何定义查询机制,索引器都只能使用整数值来索引(×)//索引器不必根据整数值进行索引,由您决定如何定义特定的查找机制。
E.索引器可以重载(√)
F.索引器可有多于一个参数,如访问二维数组(√)
34.关于委托
A.委托类似C++中的函数指针(√)
B.可使用命名和匿名方法实例化(√)
C.允许方法以参数形式传递(√)
D.多方法不可对应单个事件,即一个方法对应一个事件(×)//一个事件可以有多个订阅者
E.方法与委托的签名不必精确匹配(√)
F.委托的协变与逆变主要针对父子类而言,前者针对返回值,后者针对方法参数(√)//逆变用in关键字,而协变用out关键字,输入参数类型为逆变,返回值类型为协变
G.泛型委托可以定义自己的类型参数(√)
35.关于事件
A.事件是委托的特殊类型,仅能从声明的类中唤醒(√)
B.派生类不能唤醒基类声明的事件,可采用调用或覆盖唤醒方法的形式(√)
C.事件可有多个订阅者,无订阅者的事件也会被调用(×)//不会被调用
D.标准的事件委托模式使用EventHandler和EventArgs类,针对无附加数据的事件;(√)//不太确定
E.当事件带数据时,需从EventArgs派生新的事件数据类,并声明相应的委托(√)//通常是用EvengArgs做基类,是个通常的约定做法
(以下大段的代码都经过VisualStudio验证,有些注意自己加命名空间之类的辅助的东西……)
三、程序改写或补全
1、下面程序采用lambda表达来实现时间预处理方法的关联,试改写为匿名方法实现。
(去年考了,注意答案和题干可能会互换)
Publisher.RaiseCustomEvent+=(o,e)=>{
Strings=o.ToString()+””+e.ToString();
Console.WriteLine(s);
}
答案:
//就是把(o,e)改为匿名的然后把那个lambda运算符去掉
publisher.RaiseCustomEvent+=delegate(objecto,CustomEventArgse)
{
strings=o.ToString()+""+e.ToString();
Console.WriteLine(s);
};
2、试为下面代码中的重写属性添加具体的读写访问器代码
PublicclassParent
{
PublicvirtualintTestProperty
{
//Noticetheaccessoraccessibdaylevel
Protectedset{}
//Noaccessmodifierisusedhere
Get{return0;}
}
}
publicclasskid:
parent
{
privateinttestproperty=0
publicoverrideinttsetproperty
{
//在此输入代码
}
}
答案:
//已经运行通过
namespaceConsoleApplication2
{
classProgram
{
staticvoidMain(string[]args)
{
}
}
publicclassparent
{
publicvirtualintTestProperty
{
//Noticetheaccessoraccessibdaylevel
protectedset{}
//Noaccessmodifierisusedhere
get{return0;}
}
}
publicclasskid:
parent
{
privateinttestproperty=0;
publicoverrideinttsetproperty
{
protectedset{testproperty=value;}
get{returntsetproperty;}
}
}
}
?
3.试在类IndexerClass中实现ISomeI