.Net软件工程师面试题_第1页
.Net软件工程师面试题_第2页
.Net软件工程师面试题_第3页
.Net软件工程师面试题_第4页
.Net软件工程师面试题_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

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

文档简介

共享知识 分享快乐共享知识 分享快乐卑微如蟋蚁、坚强似大象卑微如蟋蚁、坚强似大象一.填空题(每空1分,共12分)1面向对象的语言具有__封装性、__继承性、__多态性。2能用foreach遍历访问的对象需要实现[enumerable接口或声明GetEnumerator方法的类型。3当类T只声明了私有实例构造函数时, 则在T的程序文本外部,不可以—(可以or不可以)从T派生出新的类,在T的内部—可以_(可以 or不可以)直接创建T的任何实例,在T的外部_不可以__(可以or不可以)直接创建T的任何实例。委托声明的关键字是—Delegateoverride与重载的区别: override覆盖是基类中函数的重写。 重载:方法或函数的名称相同,参数或许参数类型不同,进行多次重载实现功能。二.不定项选择(每题2分,共18)Question1以下叙述正确的是:A.接口中可以有虚方法。 B.一个类可以实现多个接口。C.接口不能被实例化。D.接口中可以包含已实现的方法。Question2以下描述错误的是().在C++中支持抽象类而在C#中不支持抽象类。.C++中可在头文件中声明类的成员而在 CPP文件中定义类的成员, 在C#中没有头文件并且在同一处声明和定义类的成员。.在C#中可使用new修饰符显式隐藏从基类继承的成员。.在C#中要在派生类中重新定义基类的虚函数必须在前面加 Override。Question3声明一个委托publicdelegateintmyCallBack(intx);则用该委托产生的回调方法的原型应该是voidmyCallBack(intx)intreceive(intnum)stringreceive(intx)不确定的Question4下列描述错误的是()a)类不可以多重继承而接口可以;b)抽象类自身可以定义成员而接口不可以;c)抽象类和接口都不能被实例化;d)一个类可以有多个基类和多个基接口;Question5下列关于构造函数的描述正确的是()a)构造函数可以声明返回类型。b)构造函数不可以用 private修饰c)构造函数必须与类名相同d)构造函数不能带参数Question6接口是一种引用类型,在接口中可以声明(),但不可以声明公有的域或私有的成员变量。a)方法、属性、索引器和事件 ;b)方法、属性信息、属性;c)索引器和字段;d)事件和字段;Question7以下的C#代码,试图用来定义一个接口:publicinterfaceIFile{intA;intdelFile(){A=3;}voiddisFile();}关于以上的代码,以下描述错误的是 ()。a)以上的代码中存在的错误包括: 不能在接口中定义变量,所以intA代码行将出现错误;b)以上的代码中存在的错误包括:接口方法delFile是不允许实现的, 所以不能编写具体的实现函数;c)代码voiddisFile();声明无错误,接口可以没有返回值;d)代码voiddisFile();应该编写为voiddisFile(){};Question8.classClassi{publicstaticintCount=0;staticClass1(){Count++;}publicClass1(){Count++;}}Classio1=newClass1();Classio2=newClass1();请问,Classl.Count的值是多少?()1234Question9abstractclassBaseClass{publicvirtualvoidMethodA(){Console.WriteLine("BaseClass");}publicvirtualvoidMethodB(){}}classClassi:BaseClass{publicvoidMethodA(){Console.WriteLine("Class1");}publicoverridevoidMethodB(){}}classClass2:Classi{newpublicvoidMethodB(){}}classMainClass{publicstaticvoidMain(string口args) {Class2o=newClass2();o.MethodA();}}请问,此程序输出结果是 :BaseClassBassClassClassiClassiClassiBassClass(解析,三重继承问题,孙类只是继承父类,而不是直接继承祖父类 )三.问答题(每题3分,共15分)简述private、protected、public、internal修饰符的访问权限。private:私有访问,它只能在声明自身的类中进行访问。protected:表示受保护的访问,该类内部和继承类中可以访问.public:表示公共访问,在代码任何位置都可对其进行访问internal表示内部成员,在同一命名空间内可以访问。C#中的委托是什么?事件是不是一种委托?委托是指具有相同属性(也称具有相同的函数签名: 返回类型相同,参数类型、 参数顺序及参数个数相同)的函数或方法的抽象,关键字为delegate。主要用途是三个:1)函数回调;2)传递方法;3)事件机制事件就是一个狭义的委托,也就是事件是一个用于事件驱动模型的专用委托, 对事件的声明,实际是声明一个私有的委托变量,对委托变量进行封装,即委托变量加上 event关键字后,不管其前面的访问修饰符是public还是private,编译器都会将其编译为private。委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用 If-Else(Switch)语句,同时使得程序具有更好的可扩展性。以委托为参数的函数具有一定的通用性。使用委托可以将多个方法绑定到同一个委托变量,当调用此变量时 (这里用调用”这个词,是因为此变量代表一个方法),可以依次调用所有绑定的方法。abstract可以和virtual一起使用吗?可以和override一起使用吗?不可以一起使用,但是可以和 override一起使用。请叙述属性与索引器的区别。属性:它是存取类的字段,索引器:Indexer它是特殊的属性,用它可以使用户像访问数组一样访问类的成员。请详述在dotnet中类(class)与结构(struct)的异同。类class可以进行实例化,它是引用类型,内存分配在栈中,效率高,它有默认的构造函数,有析构函数可以使用 abstract和sealed,protected修饰符。要用new进行初始化,结构它是属于值类型,内存分配在堆中,效率低,它没有默认的构造函数,但是可以添加构造函数,没有析构函数没有 abstract和sealed(因为不能继承)不能有protected修饰符可以不使用new初始化,但是可以在结构中初始化实例字段。四.分析程序(每题5分,共25分)(此题不能调试,若发现调试,扣除分数).写出程序的输出结果classClassi{privatestringstr="Classl.str";privateinti=0;staticvoidStringConvert(stringstr){str="stringbeingconverted.";}staticvoidStringConvert(Class1c){c.str="stringbeingconverted.";}staticvoidAdd(inti){i++;}staticvoidAddWithRef(refinti){i++;}staticvoidMain(){inti1=10;inti2=20;stringstr="str";Class1c=newClass1();Add(i1);AddWithRef(refi2);Add(c.i);StringConvert(str);StringConvert(c);Console.WriteLine(i1);Console.WriteLine(i2);Console.WriteLine(c.i);Console.WriteLine(str);Console.WriteLine(c.str);}}10210strstringbeingconverted.写出程序的输出结果publicabstractclassA{publicA(){Console.WriteLine('A');}publicvirtualvoidFun(){Console.WriteLine("A.Fun()”);}}publicclassB:A{publicB(){Console.WriteLine('B');}publicoverridevoidFun(){Console.WriteLine("B.Fun()”);}publicstaticvoidMain(){Aa=newB();a.Fun();}}解析:主函数Aa=newB();首先声明了一个A的对象a,但被赋给不同于A的对象B,在此期间分别调用了A类的构造函数和B类的构造函数,然后调用a的fun()函数,因为a的fun()函数是虚函数,被b的fun()的函数覆盖,所以实际执行的是 b的fun().答案:ABB.Fun().写出程序的输出结果:publicclassA{publicvirtualvoidFun1(inti){Console.WriteLine(i);}publicvoidFun2(Aa){a.Fun1(1);Fun1(5);}}publicclassB:A{publicoverridevoidFun1(inti){base.Fun1(i+1);}publicstaticvoidMain(){Bb=newB();Aa=newA();b.Fun2(a);a.Fun2(b);}}输出结果为:2516(一个函数的执行必须在一个具体的对象中实现,如果函数明确告诉是哪个对象,则在改该对象下执行;如果没有,则在默认的对象下执行).在下面的例子里usingSystem;classA{publicA(){PrintFields();}publicvirtualvoidPrintFields(){}}classB:A{intx=4;inty;publicB(){y=-1;}publicoverridevoidPrintFields(){x+=1;Console.WriteLine("x={0},y={1}",x,y);y+=1;}当使用Bb=newB() 创建的实例时,产生什么输出? b.PrintFields(); 结果是什么?X=5,y=0b.PrintFields结果是x=6;y=15.下面的例子中usingSystem;classA{publicstaticintX;staticA(){X=B.Y+1;}}classB{publicstaticintY=A.X+1;staticB(){}staticvoidMain(){Console.WriteLine("X={0},Y={1}"AX,B.Y);}}产生的输出结果是什么?X=2,Y=1五.程序设11(每题7分,共28分).请编程实现一个冒泡排序算法?//比较法usingSystem;usingSystem.Collections.Generic;usingSystem.Text;namespacetest1{classProgram{staticvoidMain(string口args){int口Array={6,18,12,23,19,28,30};Console.WriteLine("排序前的数组:”);foreach(intninArray){Console.Write(n+"");}Console.WriteLine();for(inti=1;i<Array.Length;i++) //控制趟数{for(intj=0;j<Array.Length-i;j++){if(Array[j]>Array[j+1]) //交换{inttemp=Array[j];Array[j]=Array[j+1];Array[j+1]=temp;}}}//排序后Console.WriteLine("排序后的数组:");for(intn=0;n<Array.Length;n++){Console.Write(Array[n]+ "");}Console.WriteLine();}}}.编程程序实现委托,事件。usingSystem;usingSystem.Collections.Generic;usingSystem.Text;

namespacedelegateDemo{classProgram{staticvoidMain(string口args){Catcat=newCat();Mousemouse=newMous《);Mastermaster=newMaster();cat.Calling+=newEventHandler(mouse.Escape);cat.Calling+=newEventHandler(master.Wakened);}}}}publicsealed{publicpublic{//检查事件是否被注册的方法}}publicsealed{public{classCat//猫类eventEventHandlerCalling;voidCall()Console.WriteLine("猫开始叫了 ");if(Calling!=null)Calling(this,EventArgs.Empty);〃调用事件注册classMouse//老鼠类voidEscape(objectsender,EventArgse)Console.WriteLine("老鼠逃跑了...");}publicsealedclassMaster//主人{publicvoidWakenedObjectsender,EventArgse){Console.WriteLine("主人惊醒了...");}}}.写一个程序,语言不限,打印出100的阶乘(即1*2*3*…*100)的精确数值结果(不能是浮点数)如5的阶乘是1*2*3*4*5=120。usingSystem;usingSystem.Collections.Generic;usingSystem.Text;//,打印出100的阶乘(即1*2*3*..*100)的精确数值结果(不能是浮点数)。如5的阶乘是1*2*3*4*5=120namespaceshuzu{classProgram{staticvoidMain(string口args){Console.WriteLine("请输入一个正数");intn=int.Parse(Console.ReadLine());Console.WriteLine("{0}的阶乘1*2*3*…*{1}={2}",n,n,Fn(n));}publicstaticdoubleFn(intn){if(n==1){return1;else{returnn*Fn(n-1);}}}}.写一个程序,语言不限,能将人民币金额从阿拉伯数字转换为大写汉字表示。 例如,把1234.56转换为壹仟贰佰叁拾肆圆零伍角陆分。usingSystem;usingSystem.Collections.Generic;usingSystem.Text;namespaceConsoleApplicationl{classProgram{staticvoidMain(string口args){Console.WriteLine("请输入数字:");strings=Console.ReadLine();Console.Write("转换后¥:");for(inti=0;i<s.Length;i++){〃switch(Convert.ToInt32(Console.ReadLine()))switch(s[i]-48){case0:Console.Write("零");break;Console.Write("壹");break;Console.Write("贰");break;Console.Write("叁");break;Console.Write(/r

温馨提示

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

最新文档

评论

0/150

提交评论