与net程序员面试宝典及第4章_第1页
与net程序员面试宝典及第4章_第2页
与net程序员面试宝典及第4章_第3页
与net程序员面试宝典及第4章_第4页
与net程序员面试宝典及第4章_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

面试题 类和结构有什么区类以创建类的实例对象。下面代码展示了一个标准的C#类。publicpublicclass{publicstringname;publicMyClass(){name=}{name=}}publicpublicstruct{publicdecimalprice;publicstringtitle;publicstringauthor;}protected修饰符,但可以不使new进行初始化。而类有默认的构造函数,也有析构protected修饰符,并且必须使用new进行初始化。注意:结构不能直接被类或结构继承,但结构能够继承接口。new3面试题 简述C#中的虚方虚方法publicpublicclass{publicvirtualstring{return这是虚方法}}publicclassMyClass:{publicoverridestring{return这是新的方法}}}publicstaticvoid{MyClassm=newMyClass(); }在上面的代码中,基类contact定义了一个虚方法print(),而子类里也定义了一个用print()print()override关键字的作用是覆盖基类的虚方法。当然程序员也可以注销子类中的注意:当使用virtual关键字修饰符后,不允许再同时使用 、static或override关面试题 简述C#中的密封类和密封方classAsealedclassB:A{}classC:B{}

密封方法(sealed)sealed关键字进行修饰的方法,它并不影响类的继承,但classclass{protectedvirtualvoidF }classB:{sealedprotectedoverridevoidF(){ }classC:{protectedoverridevoidF(){ ine("C.F");}sealed关键字进行修饰,它不能用作其他类的基类,并且它没有派生类。sealed关键字进行修饰的方法,它面试题 请介绍C#中静态类构造方法的特classclass{publicstaticintk=100;staticStaticSimple(){ }//staticStaticSimple(String// publicpublic{ }}class{staticvoidMain(string[]{//先调用静态成员k的值,结果会是先执行静态构造方法,再显示k=100 ine("读者请注意,在输入k值请是否有其他的输出。k="+StaticStaticSimpleA=newStaticSimple();}}面试题 简述C#派生类中的构造函classclass{public{}publicpublicCircle(double{ }}classUnitCircle {publicUnitCircle(doubleunitRadius):base(unitRadius)publicUnitCircle():this(1,2) { }publicUnitCircle(inti,int { }}class{staticvoidMain(string[]{UnitCircleu=newUnitCircle(); UnitCircleu1=newUnitCircle(2);}}publicUnitCircle(doubleunitRadius):base(unitRadius) baseUnitCircle(doubleunitRadius)构造函数时,它实际调用的是基类中的Circle(doubleinitialRadius)构造函数。public 使用C#派生类中的构造函数时,需要注意关键字base与this的区别,关键字base表示调用基类中的构造函数,而this表示调用本类中的构造函数。面试题 简述接口及接口继接口注意:C#中,类可以通过继承多个接口来丰富自己的行为机制,但类是不可以继承interfaceinterface{voidCrossTheRoad(int}publicclassMyPupil:{publicvoidCrossTheRoad(int{switch{casecase…case……}}}interfaceinterface{voidCrossTheRoad(int}注意:在笔者定义的接口中仅仅是定义了一个方法,并没有任何代码功能的实现 且所有的定义都基本相同。在.NET中,和委托在本质上并没有太大的差异,但在.NET实际环境下,的运用比委托更加广泛,本节将集中介绍有关的面试题。面试题 什么是机的重要性不仅在NET种技术框架中都有很重要的地位,其次是的定义非常符合逻辑世界的概念。所以在.NET面试中关于的考题然会频出现。是.NET程序员中经常使用的一个机制,在.NET中,的定义和其他技术框架publicdelegatevoidMyEventHandler(objectsender,MyEventArgs publicpublicclass{publicdelegatevoidSomeHandler(objectsenderSystem.EventArgse);publiceventSomeHandlerSomeEvent; public{this.SomeEventthis.SomeEvent+=new }publicvoid{EventArgse=newEventArgs(); strings=Console.ReadLine();if(s.ToLower()=={ }{ }}privatevoidProcessSomeEvent(objectsender,EventArgs{ }}using{ class{privatectrEventctrEvent1newctrEvent初始ctrEvent对public{// ctrEvent1.SomeEvent+=new}publicstaticvoid{Containerpanenew } privatevoidResponseSomeEvent(objectsender,EventArgs{}}} 面试题 列举一个委托和的实扣去400元钱。这就是现实中的委托。实际上,在写程序中,程序员就是,publicclass{public{ }publicvoidDeductMoney(objectsender,EventArgs{ Lif ine("的工资:"+f.Money.ToString()); f.Moneyf.Money }}还剩下:}}System.EventArgsenew if yGame!={yGame(this,}}protectedvirtualvoid yGame(EventArgs {if yGame!={yGame(this,}}!我玩}publicint{{return}{m_Money=}}publicvoid{ m_Money= privateintm_Money;publicLi(){public publicclass{ namespacenamespace{publicdelegatevoid publicclassBackgroundEvent{{publicstaticvoidMain(string[]{ Zhaoz=newLil=new yGame+=new }}}生 !我玩 还剩下员。该委托没有返回值,并且拥有两个参数:objectsender和EventArgse。而当使用面试题 请简述EventHandlerList的作须在内部和每个定义的委托。通常的一种做法方法是通过但若要每个的委托,笔者推荐使用EventHandlerList类或实现自己的集合。下面将说明如何使用一个EventHandlerList成员来所有的,类中的每个属性定义一个Add器方法和一个Remove器方法。属性的Add器将输 classMyControl:ComponentstaticreadonlyobjectmouseDownEventKey=newstaticreadonlyobjectmouseUpEventKey=newpubliceventMouseEventHandlerMouseDownadd{listEventDelegates.AddHandler(mouseDownEventKey,value);remove{listEventDelegates.RemoveHandler(mouseDownEventKey,value);}}// publiceventMouseEventHandlerMouseUpadd{listEventDelegates.AddHandler(mouseUpEventKey,value);}}注意:可以使用EventHandlerList类或实现自定义的集合。例如可以使用Hashtable类或DictionaryBase类派生一个自定义类,不需要在类以外公开委托集合的实现详个类型中多个在EventHandlerList集合中,而不需要独立的每一个。 委托技术是.NET框架中的高级特性之一,也可以说是.NET重要技术之一,是在大多数的技术笔试、面试中必定出现的部分。委托提供了安全的函数回调(CALLBACK)面试题 什么是委.NET面试中经常会被提问什么是C#中的委托,面试官主要意图是应聘者对.NET委托Delegate关键字。委注意:委托虽然与函数指针非常类似,但却不是指针。许多程序员把.NET中的委托理主要因为委托和其他所有的.NETSystem.Delegate的某个usingSystem;usingSystem;{class{publicdelegatedoubleDelegate_Prod(inta);staticdoublefn_Prodvalues(intval1){returnval1*}staticvoidMain(string[]{Delegate_ProddelObj=new intv1=Int32.Parse(Console.ReadLine()); doubleres=delObj(v1); //调用委托方法fn_Prodvalues ine("返回值:}}}示例代码中,首先通过publicdelegatedoubleDelegate_Prod(inta)定义了一种名为成的。然后,了一个Delegate_Prod的对象delObj,并且绑定到fn_Prodvalues这个静返回值注意:本质上,委托的调用就是执行了在定义委托时所生成 Invoke()方法面试题 C#中被委托的方法必须是静态的法和实例方法,它们之间的区别如表4.1所示。4.1静态方法和实例方法Static关键 象的信息。这样,.NET才能在委托被回调(CallBack)的时候成功地执行该实例方法。Delegate.Target属性是一个指向目标实例的,当绑定实例方法给委托时,该参数会被委托绑定静态方法的分析。Delegate.Target属性是一个指向目标实例的,当绑定一个静态方法给委托时,则该参数会被设置为null。注意:如果委托调用一个或多个实例方法,则此属性返回调用列表中最后一个实例方法方法。当绑定实例方法时,Delegate.Target属性将会设置成指向该实例方法所属类型的一个实例对象,当绑定静态方法时,Delegate.Target属性将会被设置成null。面试题 什么是多播委System.MulticastDelegate类型,返回类型也必须是void,且不能带输出参数(但可以带参数),这样才能将委usingSystem;usingSystem;{class{publicdelegatevoid okittyHander(stringmsg);privatevoid okitty1(stringmsg) { okitty1"+}}privateokitty2(string{ okitty2"+}private okitty3(string { okitty3"+}staticvoidMain(string[]{MulticastDelegateSimpleDelegate=new okitty+=newokitty=okitty-=new if( okitty!=null)}}}简单分析这个例子,示例代码中首先定义了一个带string参数无返回的委托okittyHander,在Main()函数中了一个okittyHander的委托变量okitty,并绑定了第一个方法voidokitty1(stringmsg)。然后,通过okitty+=newnewokittyHander(SimpleDelegate.okitty1)初始化了第二个委托,并且绑定了voidokitty2(stringmsg),同时把第二个委托挂在第一个委托之后。紧接着,挂上第三个委托并绑定到voidokitty3(stringmsg)。这是一种比较简单明了的写法,在开发ASP.NET或者Windows应用程序时,当一个按钮被添加时,VisualStudio就会为程序生成类似okitty-= 注意:多播委托是指一个委托的链表,而不是指另一类特殊的委托。当执行链上的一方法,后续委托方法将会依次被执行。System.MulticastDelegate定义了对多播委面试题 列举一个C#中的委托应class{privatestringname;privatedecimalscore; publicStudent(stringname,decimalscore)//构造函数、参 {=name;this.score=score;}///<paramname="lhs">左侧学生对象///<paramname="rhs">右侧学生对象///<returns>右侧学生对象的成绩高则返回true</returns>publicstaticboolRhsIsGreater(objectlhsobjectrhs){StudentstudentL=(Student)lhs;StudentstudentR=return(studentR.score>studentL.score)?true:}publicoverridestring{returnstring.Format(name+":"+}}{///<paramname="sortArray">要进行排序

温馨提示

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

评论

0/150

提交评论