2024年3月20日发(作者:)
研发部面试题 Written by Dev. Group.
答题要求:打*号的部分为必答题,未指明为多选题的选择题均为
单选题。
一、.Net Framework部分*
1. 装箱、拆箱操作发生在: ( C )
A.类与对象之间 B.对象与对象之间
C.引用类型与值类型之间 D.引用类型与引用类型之间
2. 用户类若想支持Foreach语句需要实现的接口是: ( B )
rable rator
ction ctData
3. .Net Framework通过什么与COM组件进行交互操作?( C )
By Side
p
Service
e
4. .Net依靠以下哪一项技术解决COM存在的
Dll Hell
问题的?( A )
By Side p
e +
5. 装箱与拆箱操作是否是互逆的操作?( A )
A.是 B.否
6. 以下哪个是可以变长的数组?( D )
[]
[N] ist
7. 用户自定义异常类需要从以下哪个类继承:( C )
ion Exception
ationException ception
8. 以下代码段中能否编译通过?请给出理由。
try
{
}
catch(FileNotFoundException e1)
{
}
catch(Exception e2)
{
}
catch(IOException e3)
{
}
catch
{
第 1 页共9 页
研发部面试题 Written by Dev. Group.
}
不能编译通过,因为e3是e2的子类,所有属于e3异常会被e2捕获。
9. 对于一个实现了IDisposable接口的类,以下哪些项可以执行与释放或重置非托管资源相
关的应用程序定义的任务?(多选) ( BD )
e ze
10. .Net依赖以下哪项技术实现跨语言互用性?( C )
类?(简答)
和JAVA中的StringBuffer类似,StringBuilder可以提高字符串连接时的性能。因为
String是只读的,连接时内存中需要存在临时对象,而StringBuilder在内存中仅仅只有
一份。
12. 以下哪个类是int的基类?( C )
32 ype 16
11. 请问: String类与StringBuilder类有什么区别?为什么在.Net类库中要同时存在这2个
二、C# 部分*
13. 以下哪些可以作为接口成员?(多选) ( ABDE)
A.方法 B.属性 C.字段 D.事件 E.索引器
F.构造函数 G.析构函数
14. 以下关于ref和out的描述哪些项是正确的?(多选) ( ACD )
A.使用ref参数,传递到ref参数的参数必须最先初始化。
B.使用out参数,传递到out参数的参数必须最先初始化。
C.使用ref参数,必须将参数作为ref参数显式传递到方法。
D.使用out参数,必须将参数作为out参数显式传递到方法。
15. “访问范围限定于此程序集或那些由它所属的类派生的类型”是对以下哪个成员可访问性
含义的正确描述?( D )
ted al
可访问性的关键字有如下5个:
internal:在所属程序集中可以访问。
private:私有成员, 在当前类中可以访问。
protected:保护成员,在当前类及其子类中可以访问。
public:公共成员,完全公开,没有访问限制。
internal protected:在所属程序集或当前类的子类中可以访问。(题目中未提及)
【扩展】
类的修饰符:abstract,sealed,static,unsafe 4个。
abstract:类是抽象的,不能创建类的实例
sealed:类是密封的,不能被继承
第 2 页共9 页
ted internal
研发部面试题 Written by Dev. Group.
static:类是静态的,只有静态成员,没有非静态成员
unsafe:类有非安全的结构,比如指针
16. abstract class BaseClass
{
public virtual void MethodA()
{
}
public virtual void MethodB()
{
}
}
class Class1: BaseClass
{
public void MethodA(string arg)
{
}
public override void MethodB()
{
}
}
class Class2: Class1
{
new public void MethodB()
{
}
}
class MainClass
{
public static void Main(string[] args)
{
Class2 o = new Class2();
ine(A());
}
}
请问,A调用的是: ( )
A A
A D.都不是
17. 请叙述属性与索引器的区别。
属性
通过名称标识。
通过简单名称或成员访问来访问。
可以为静态成员或实例成员。
第 3 页共9 页
索引器
通过签名标识。
通过元素访问来访问。
必须为实例成员。
研发部面试题 Written by Dev. Group.
属性的 get 访问器没有参数。 索引器的 get 访问器具有与索引器相同的形参
表。
属性的 set 访问器包含隐式 value 除了 value 参数外,索引器的 set 访问器还具
参数。 有与索引器相同的形参表。
18. 请叙述const与readonly的区别。
const必须在声明时赋值,而readonly可以在构造函数中赋值;
const会被编译器优化,编译后const常量会消失,而readonly在运行时才确定值;
当版本升级,const变量修改后,调用const变量的所有应用程序需要重新编译,而readonly
不需要重新编译。
19. 请叙述类与结构的区别。
1)语法不同(比如class默认是无参构造函数,但是可以显示声明;struct不能显示
声明无参构造函数)。
2)struct对struct赋值是拷贝,而class是引用。
3)struct不能存在继承,class可以继承一个class
4)struct定义的属性不能直接在构造函数给赋值,但是class可以。
5)struct没有析构函数和重写什么的概念(因为不存在继承啊)。
20.
从值类型和引用类型的区别展开
、值类型通常被分配在栈上,它的变量直接包含变量的实例,使用效率比较高。
2、引用类型分配在托管堆上,引用类型的变量通常包含一个指向实例的指针,变量通过该
指针来引用实例。
3、值类型继承自ValueType(注意:而ype又继承自);而引用
类型继承自。
4、值类型变量包含其实例数据,每个变量保存了其本身的数据拷贝(副本),因此在默认
情况下,值类型的参数传递不会影响参数本身;而引用类型变量保存了其数据的引用地址,
因此以引用方式进行参数传递时会影响到参数本身,因为两个变量会引用了内存中的同一
块地址。
5、值类型有两种表示:装箱与拆箱;引用类型只有装箱一种形式。我会在下节以专门的篇
幅来深入讨论这个话题。
第 4 页共9 页
研发部面试题 Written by Dev. Group.
6、典型的值类型为:struct,enum以及大量的内置值类型;而能称为类的都可以说是引用
类型。
7、值类型的内存不由GC(垃圾回收,Gabage Collection)控制,作用域结束时,值类型会
自行释放,减少了托管堆的压力,因此具有性能上的优势。例如,通常struct比class更高
效;而引用类型的内存回收,由GC来完成,微软甚至建议用户最好不要自行释放内存。
8、值类型是密封的(sealed),因此值类型不能作为其他任何类型的基类,但是可以单继承
或者多继承接口;而引用类型一般都有继承性。
9、值类型不具有多态性;而引用类型有多态性。
10、值类型变量不可为null值,值类型都会自行初始化为0值;而引用类型变量默认情况
下,创建为null值,表示没有指向任何托管堆的引用地址。对值为null的引用类型的任何
操作,都会抛出NullReferenceException异常。
11、值类型有两种状态:装箱和未装箱,运行库提供了所有值类型的已装箱形式;而引用
类型通常只有一种形式:装箱。
21. Override与重载有什么区别?
Override涉及到继承,而重载则是方法的名称相同,而签名不同
重写(override)指用override关键字重新实现基类中的虚方法,在运行过程中,无论通过哪
个类型的引用,真正对象类型的方法将被调用。
重载(overload)指多个方法共享一个名字并且拥有相同的返回值,但是拥有不同的参数。
隐藏(new)指用new关键字重新实现基类中的方法,在运行的过程中通过引用的类型判断应该
调用哪个类型的方法。
22. 怎样理解静态变量?
类的静态变量只维护一份
C#中的委托是什么?
答:委托是一种引用方法的类型。一旦为委托分配了方法,委托将与该方法具有完全相同的行
为。委托方法的调用可以像其他任何方法一样,具有参数和返回值。
委托是函数的封装,代表一"类"函数,它们都符合一定的签名:拥有相同的参数列表、返回值
类型。同时,委托也可以看成是对函数的抽象,是函数的"类"。此时委托的实例代表一个具体
的函数
三、 & 部分*
23. 您需要创建一个应用程序,公司考虑使用Windows身份认证。
第 5 页共9 页


发布评论