C#面试题记录

时间:2021-08-25 01:12:39

最怕的就是面试,每每到找工作的时候感觉压力山大,每次都要提前刷点题目去面对。所以这里自己对以后需要了解的知识做一个记录,方便自己随时的补充和深入了解,也给现在的自己留下一点点的印记,给未来留下一点回忆。

下面进入到正题,其实在面试的时候我们往往都会被问到一些C#基础的知识,其实就和之前听过的一句话所说的,“它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了”,的确!很多东西就是这样子,尤其对于我个人来说更加是这样子,如果有实践的实现和应用,我能够把这个东西理解的稍微透彻一点,说起来也能够表达出自己的一些看法,但如果是一些只听说过,,用的不是很深的东西,每每一些基础点,只能够大概的讲出他的官方定义,在深入可能满脑子都是问号了!所以就想通过这篇文章记录一些面试过程中会常碰见的问题,熟悉的自己讲一讲自己看法,不熟悉的先记录下来,然后慢慢的去补充。

1.委托和事件

a.委托

关键字:delegate

基础定义:C“运行时“的qsort函数获取指向一个回调函数的指针,以便对数组中的元素进行排序。在Microsoft Windows中,窗口过程,钩子过程和异步过程调用等都需要回调函数。在.Net Framework中,回调函数的应用更是广泛

个人理解:其实单从这个基础上面定义来说比较简单的,主要应用的场景主要是在一个方法,有一个参数的值是需要传递另外一个方法,然后使用这个传入的方法。如果在js中大致的把这个理解为回调函数,回调函数的也是把方法名作为参数传递,但是因为js定义方法的时候不需要对这个传入的方法进行修饰,直接一个名称定义就可以了,但是在C#的方法定义的时候需要对这个传入的参数进行定义,比如是int,string,实体,等等,所以在这里出现了委托delegate修饰符,定义一个delegate修饰的委托,然后作为修饰符修饰需要传递的方法。个人的暂时理解是这样的,如果理解错了,请大家指出。(后面翻了一下CLR via C#关于委托的说明,表示有点懵,讲得很底层也很深入,感觉我理解的要怎么去用!而书里讲的是为什么是这样,实现的机制以及原理是什么,产出的1L代码是怎样的!)

namespace 委托与事件 { class Program { static void Main(string[] args) { Console.WriteLine(GreetPeople("张三", ShowChinese)); Console.WriteLine(GreetPeople("zhangsan", ShowEnglish)); Console.ReadKey(); } /// <summary> /// 中文问好 /// </summary> /// <param></param> /// <returns></returns> public static string ShowChinese(string name) { return name + ",你好!"; } /// <summary> /// 英文问好 /// </summary> /// <param></param> /// <returns></returns> public static string ShowEnglish(string name) { return name + ",hello!"; } /// <summary> /// 定义一个委托 /// </summary> /// <param></param> /// <returns></returns> public delegate string Show(string name); //注意此方法,它接受一个show类型的方法作为参数 private static string GreetPeople(string name, Show show) { return show(name); } } }

View Code

2.事件

关键字:event

基础定义:定义了事件成员的类型允许类型(或类型的实例)通知其他对象发生了特定的事情。例如Button类定义了Click时间。应用程序中的一个或多个对象可以接收关于该事件的通知,以便在Button被单击之后采取特定的操作。我们用事件这种类型成员来实现这种交互。具体地说,定义了事件成员的类型能提供一下功能

方法能登记它对事件的关注

方法能注销它对事件的关注

事件发生时,登记了的方法将会收到通知。