最怕的就是面试,往往到找工做的时候感受压力山大,每次都要提早刷点题目去面对。因此这里本身对之后须要了解的知识作一个记录,方便本身随时的补充和深刻了解,也给如今的本身留下一点点的印记,给将来留下一点回忆。web
下面进入到正题,其实在面试的时候咱们每每都会被问到一些C#基础的知识,其实就和以前听过的一句话所说的,“它们就像是一道槛儿,过了这个槛的人,以为真是太容易了”,的确!不少东西就是这样子,尤为对于我我的来讲更加是这样子,若是有实践的实现和应用,我可以把这个东西理解的稍微透彻一点,提及来也可以表达出本身的一些见解,但若是是一些只据说过,用的不是很深的东西,往往一些基础点,只可以大概的讲出他的官方定义,在深刻可能满脑子都是问号了!因此就想经过这篇文章记录一些面试过程当中会常遇见的问题,熟悉的本身讲一讲本身见解,不熟悉的先记录下来,而后慢慢的去补充。面试
1.委托和事件数组
a.委托异步
关键字:delegateide
基础定义:C“运行时“的qsort函数获取指向一个回调函数的指针,以便对数组中的元素进行排序。在Microsoft Windows中,窗口过程,钩子过程和异步过程调用等都须要回调函数。在.Net Framework中,回调函数的应用更是普遍函数
我的理解:其实单从这个基础上面定义来讲比较简单的,主要应用的场景主要是在一个方法,有一个参数的值是须要传递另一个方法,而后使用这个传入的方法。若是在js中大体的把这个理解为回调函数,回调函数的也是把方法名做为参数传递,可是由于js定义方法的时候不须要对这个传入的方法进行修饰,直接一个名称定义就能够了,可是在C#的方法定义的时候须要对这个传入的参数进行定义,好比是int,string,实体,等等,因此在这里出现了委托delegate修饰符,定义一个delegate修饰的委托,而后做为修饰符修饰须要传递的方法。我的的暂时理解是这样的,若是理解错了,请你们指出。(后面翻了一下CLR via C#关于委托的说明,表示有点懵,讲得很底层也很深刻,感受我理解的要怎么去用!而书里讲的是为何是这样,实现的机制以及原理是什么,产出的1L代码是怎样的!)ui
namespace 委托与事件 { class Program { static void Main(string[] args) { Console.WriteLine(GreetPeople("张三", ShowChinese)); Console.WriteLine(GreetPeople("zhangsan", ShowEnglish)); Console.ReadKey(); } /// <summary> /// 中文问好 /// </summary> /// <param name="name"></param> /// <returns></returns> public static string ShowChinese(string name) { return name + ",你好!"; } /// <summary> /// 英文问好 /// </summary> /// <param name="name"></param> /// <returns></returns> public static string ShowEnglish(string name) { return name + ",hello!"; } /// <summary> /// 定义一个委托 /// </summary> /// <param name="name"></param> /// <returns></returns> public delegate string Show(string name); //注意此方法,它接受一个show类型的方法做为参数 private static string GreetPeople(string name, Show show) { return show(name); } } }
2.事件spa
关键字:event.net
基础定义:定义了事件成员的类型容许类型(或类型的实例)通知其余对象发生了特定的事情。例如Button类定义了Click时间。应用程序中的一个或多个对象能够接收关于该事件的通知,以便在Button被单击以后采起特定的操做。咱们用事件这种类型成员来实现这种交互。具体地说,定义了事件成员的类型能提供一下功能指针
方法能登记它对事件的关注
方法能注销它对事件的关注
事件发生时,登记了的方法将会收到通知。
我的理解:对于事件的理解主要停留在Button按钮的点击事件,作窗体程序,webFrom程序的时候,每添加一个Button的时候,在双击它的时候,后天的cs页面就会注册一个点击事件
,点击这个按钮查看属性的时候也会在事件这个属性中看到按钮的Click事件被注册了button1_Click这个方法,其实从这个例子能够推理一下,当前是注册了单击按钮这个行为到事件,扩展一下同理的能够注册事物的其它的行为到事件,因此我的在这里就这样理解,事件就是给某一个事物注册了某一个动做或者行为,这个动做或者是行为在收到某个指令的时候会发送。在这里联想到了机器人,当机器人收到了某一个命令,确定会先去解析这个命令,而后转换成指令,而后去执行相对应的动做,在这里就能够把这些机器执行的动做当作是程序事先给机器注册的事件。(感受说的有点偏,若是理解的不对,还望可以指出)
这里很是推荐一篇文章:C# 中的委托和事件
2.关于int类型的长度,占多少字节(ps去年碰到的一个试题,到如今都还印象深入)
其实这问题有一个条件没有补充完整,因此回答的时候得本身补充完成。
主要的int类型有Int16,Uint16,Int32,Uint32,Int64,Uint64
short System.Int16 (短整型,占 2 字节,表示 16 位整数,范围 -2^15 ~ 2^15-1)
ushort System.UInt16 (无符号短整型,占 2 字节,表示 16 位正整数,范围 0 ~ 2^16)
int System.Int32 (整型,占 4 字节,表示 32 位整数,范围 -2^31 到 2^31-1)
uint System.UInt32 (无符号整型,占 4 字节,表示 32 位正整数,范围 0 ~ 2^32)
long System.Int64 (长整型,占 8 字节,表示 64 位整数,范围大约 -(10 的 19) 次方 到 10 的 19 次方)
ulong System.UInt64 (无符号长整型,占 8 字节,表示 64 位正整数,范围 0 ~ 大约 10 的 20 次方)
补充一下其余的类型
bool System.Boolean (布尔型,其值为 true 或者 false)
byte System.Byte (字节型,占 1 字节,表示 8 位正整数,范围 0 ~ 255)
sbyte System.SByte (带符号字节型,占 1 字节,表示 8 位整数,范围 -128 ~ 127)
char System.Char (字符型,占有两个字节,表示 1 个 Unicode 字符)
float System.Single (单精度浮点型,占 4 个字节)
double System.Double (双精度浮点型,占8 个字节)
暂时先写这两点了,以后有时间在补充。