.net软件工程师面试题

上传人:第*** 文档编号:32801699 上传时间:2018-02-12 格式:DOC 页数:33 大小:224KB
返回 下载 相关 举报
.net软件工程师面试题_第1页
第1页 / 共33页
.net软件工程师面试题_第2页
第2页 / 共33页
.net软件工程师面试题_第3页
第3页 / 共33页
.net软件工程师面试题_第4页
第4页 / 共33页
.net软件工程师面试题_第5页
第5页 / 共33页
点击查看更多>>
资源描述

《.net软件工程师面试题》由会员分享,可在线阅读,更多相关《.net软件工程师面试题(33页珍藏版)》请在金锄头文库上搜索。

1、一填空题(每空1分,共12分)1面向对象的语言具有_封装_性、_继承_性、_多态_性。2能用 foreach 遍历访问的对象需要实现 _Ienumerable_接口或声明_GetEnumerator_方法的类型。3当类 T 只声明了私有实例构造函数时,则在 T 的程序文本外部,_不可以_(可以 or 不可以)从 T 派生出新的类,在 T 的内部_可以_(可以 or 不可以)直接创建 T 的任何实例,在 T 的外部_不可以_(可以 or 不可以)直接创建 T 的任何实例。4. 委托声明的关键字是_Delegate_ 5. override 与重载的区别: override 覆盖是基类中函数的重写

2、。重载:方法或函数的名称相同,参数或许参数类型不同,进行多次重载实现功能。 二. 不定项选择(每题2分,共18)Question 1以下叙述正确的是:A. 接口中可以有虚方法。 B. 一个类可以实现多个接口。C. 接口不能被实例化。 D. 接口中可以包含已实现的方法。Question 2以下描述错误的是()1. 在 C+中支持抽象类而在 C#中不支持抽象类。2. C+中可在头文件中声明类的成员而在 CPP 文件中定义类的成员,在 C#中没有头文件并且在同一处声明和定义类的成员。3. 在 C#中可使用 new 修饰符显式隐藏从基类继承的成员。4. 在 C#中要在派生类中重新定义基类的虚函数必须在

3、前面加 Override。Question 3声明一个委托 public delegate int myCallBack(int x); 则用该委托产生的回调方法的原型应该是1. void myCallBack(int x)2. int receive(int num)3. string receive(int x)4. 不确定的Question 4下列描述错误的是() a) 类不可以多重继承而接口可以; b) 抽象类自身可以定义成员而接口不可以; c) 抽象类和接口都不能被实例化; d) 一个类可以有多个基类和多个基接口;Question 5下列关于构造函数的描述正确的是() a) 构造函数

4、可以声明返回类型。 b) 构造函数不可以用 private 修饰 c) 构造函数必须与类名相同 d) 构造函数不能带参数Question 6接口是一种引用类型,在接口中可以声明( ) ,但不可以声明公有的域或私有的成员变量。 a) 方法、属性、索引器和事件; b) 方法、属性信息、属性; c) 索引器和字段; d) 事件和字段;Question 7以下的 C#代码,试图用来定义一个接口: public interface IFile int A; int delFile() A = 3; void disFile(); 关于以上的代码,以下描述错误的是( )。 a) 以上的代码中存在的错误包括

5、:不能在接口中定义变量,所以 int A 代码行将出现错误; b) 以上的代码中存在的错误包括:接口方法 delFile 是不允许实现的,所以不能编写具体的实现函数; c) 代码 void disFile();声明无错误,接口可以没有返回值; d) 代码 void disFile();应该编写为 void disFile(); Question 8.class Class1public static int Count = 0;static Class1()Count+;public Class1()Count+;Class1 o1 = new Class1();Class1 o2 = new

6、 Class1();请问,Class1.Count 的值是多少?( )1. 12. 23. 34. 4Question 9abstract class BaseClasspublic virtual void MethodA()Console.WriteLine(BaseClass);public virtual void MethodB()class Class1: BaseClasspublic void MethodA()Console.WriteLine(Class1);public override void MethodB()class Class2: Class1new publ

7、ic void MethodB()class MainClasspublic static void Main(string args)Class2 o = new Class2();o.MethodA();请问,此程序输出结果是:1. BaseClass2. BassClass Class13. Class14. Class1 BassClass(解析,三重继承问题,孙类只是继承父类,而不是直接继承祖父类)三问答题(每题3分,共15分)1. 简述 private、 protected、 public、 internal 修饰符的访问权限。private:私有访问,它只能在声明自身的类中进行访

8、问。protected:表示受保护的访问,该类内部和继承类中可以访问.public :表示公共访问,在代码任何位置都可对其进行访问 internal 表示内部成员,在同一命名空间内可以访问。2. C#中的委托是什么?事件是不是一种委托?委托是指具有相同属性(也称具有相同的函数签名:返回类型相同,参数类型、参数顺序及参数个数相同)的函数或方法的抽象,关键字为 delegate。主要用途是三个:1 )函数回调;2)传递方法;3)事件机制事件就是一个狭义的委托,也就是事件是一个用于事件驱动模型的专用委托,对事件的声明, 实际是声明一个私有的委托变量,对委托变量进行封装,即委托变量加上 event 关

9、键字后,不管其前面的访问修饰符是 public 还是 private,编译器都会将其编译为 private。委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用 If-Else(Switch)语句,同时使得程序具有更好的可扩展性。以委托为参数的函数具有一定的通用性。使用委托可以将多个方法绑定到同一个委托变量,当调用此变量时(这里用“ 调用”这个词,是因为此变量代表一个方法),可以依次调用所有绑定的方法。3. abstract 可以和 virtual 一起使用吗?可以和 override 一起使用吗?不可以一起使

10、用,但是可以和 override 一起使用。4. 请叙述属性与索引器的区别。属性:它是存取类的字段,索引器:Indexer 它是特殊的属性,用它可以使用户像访问数组一样访问类的成员。5. 请详述在 dotnet 中类(class)与结构(struct)的异同。类 class 可以进行实例化,它是引用类型,内存分配在栈中,效率高,它有默认的构造函数,有析构函数可以使用 abstract 和 sealed, protected 修饰符。要用 new 进行初始化,结构它是属于值类型,内存分配在堆中,效率低,它没有默认的构造函数,但是可以添加构造函数,没有析构函数没有 abstract 和 seale

11、d(因为不能继承)不能有 protected 修饰符 可以不使用 new 初始化,但是可以在结构中初始化实例字段。四分析程序(每题5分,共25分) (此题不能调试,若发现调试,扣除分数)1. 写出程序的输出结果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 conver

12、ted.;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.

13、WriteLine(str);Console.WriteLine(c.str); 10210strstring being converted2.写出程序的输出结果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 override void Fun() Console.WriteLine(B.Fun();public

14、static void Main() A a = new B();a.Fun();解析:主函数 A a = new B();首先声明了一个 A 的对象 a,但被赋给不同于 A 的对象 B,在此期间分别调用了 A 类的构造函数和 B 类的构造函数,然后调用 a 的 fun()函数,因为 a 的 fun()函数是虚函数,被 b 的 fun()的函数覆盖,所以实际执行的是 b 的 fun().答案:ABB.Fun()3.写出程序的输出结果:public class A public virtual void Fun1(int i)Console.WriteLine(i);public void Fu

15、n2(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();b.Fun2(a);a.Fun2(b); 输出结果为:2516(一个函数的执行必须在一个具体的对象中实现,如果函数明确告诉是哪个对象,则在改该对象下执行;如果没有,则在默认的对象下执行)4. 在下面的例子里using System;class Apublic A()PrintFields();public virtual void PrintFields()class B:Aint x=4;int y;public B()y=-1;public override void PrintFields()x += 1;Console.WriteLine(x=0,y=1,x,y);y += 1;当使用 B b = new B()创建的实例时,产生什么输出?b. PrintFields();结果是什么?X=5,y=0 b. PrintFields 结果是 x=6

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 工程造价

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号