1、借助C#对UDP的封装,可以简单的实现新闻广告信息的发布和推送,通过使用UDP组播技术,服务器使用D类IP(程序上的),客户端加入组播组,同时结合路由器(支持IGMP internet 网关管理协议)可完成一对多的组播任务。
2、GDI、GDI+ 是硬件驱动程序和用户软件的桥梁,是win 32的一部分,也就是说是c函数接口,用户无法直接操作硬件,只能是内存级的操作,多用于普通应用软件界面设计。DirectX是硬件和用户软件的接口,是GDI的升级版,多用于多媒体、游戏内软件,应用程序可以直接操作显存。wpf通过milcore使用DirectX.
3、尽可能的使用绑定技术,使wpf 的数据驱动界面能很好的发挥。
4、自定义按钮控件可以通过继承Control自定义控件然后使用任意形状的图片,还可以针对特定的控件(如button)使用样式。
5、面板实现拖动效果的时候,嵌套stackpanel时,父stackpanel的background="Transparent"否则拖动不流畅。
6、按钮border和background使用样式的时候是一样的---都用刷子。
7、可以在代码里使用Findresource()和as使用xaml里的资源。如style、brush。
8、同步与异步是相较于应用程序与操作系统内核的交互而言的,同步是指用户进程触发io操作并等待或轮训的去查看io操作是否就绪,而异步是指用户进程触发io操作以后开始做自己的事情,当io操作已经完成的时候会得到io完成的通知。
9、阻塞和非阻塞是针对于进程在访问数据的时候,根据IO操作的就绪状态来采取的不同方式,说白了是一种读取或者写入操作函数的实现方式,阻塞方式下读取或者写入函数将一直等待,而非阻塞方式下,读取或者写入函数会立即返回一个状态值.
10、 网络编程中可以使用同步阻塞、异步阻塞、同步非阻塞、异步非阻塞。凡此种种,如果是基于winsocket编程的话,还是考虑选择五种IO模型,上面提到的阻塞或非阻塞只是一种IO机制,IO模型为io 数据、应用程序、系统内核提供了合理的解决方案。select模型,维护socket表集,轮训完成io操作的socket对象。WSAAsyncSelect 异步选择,基于windows窗体的消息机制,通知应用程序完成io操作的socket对象,即窗体的过程的函数回调。WSAEventSelect 事件选择,其最大于上的区别就是不是投递到窗体对象而是事件对象(creat event waitformultipleEvent)。重叠端口模型,数据端口(重叠结构绑定io请求的返回)上重复投递io操作,分事件通知和完成列程,事件通知于重叠结构绑定一时间对象(句柄),waifor之。完成列程,也即使用回调函数了。完成端口模型,不再赘述,实在被微软"服务到家了"。
11、C# 2.0中就提出了使用匿名方法,常规的事件处理函数注册时使事件处理函数单独一体,不能使用和访问注册事件中的成员。通过匿名方法,可以在注册事件方法的时候将事件处理函数"内联"到当前,如此便可使用注册事件中的成员了。
12、enum类型声明为一组相关的符号常量定义了一个类型名字,枚举类型变量的取值被限定。
13、ref必须在进入方法得到赋值,out必须在离开方法之前得到赋值。
14、带parama的数组参数调用时可以隐式转换。
15、new操作符对类对象和结构对象的处理有不同。
a.要想创建出某个类的一个实例,就必须使用一个new操作符,new操作符将进行几项非常重要的处理:
从堆里为新对象分配内存;
有选择地调用那个类的某一个构造器。
b.创建出某个结构的一个实例,也使用一个new操作符,new操作符将调用结构的惟一的无参数构造器(不能重写),无参数构造器只是把所有的字段初始化0或null而已,其他什么都不做.
16、readonly只能在初始化--声明初始化或构造器初始化--的过程中赋值,其他地方不能进行对只读域的赋值操作,否则编译器会报错。const修饰的常量必须在声明的同时赋值,而且要求编译器能够在编译时期计算出这个确定的值。const修饰的常量是在编译时便被计算出确定的值,并代换到引用该常量的每一个地方,而readonly时在运行时才确定的量。
17、as 运算符只执行引用转换和装箱转换。当转换失败时,as 运算符将产生空,而不是引发异常。is 运算符用于检查对象的运行时类型是否与给定类型兼容.
18、类的静态构造函数在程序域中只能调用一次,在创建类对象的时候或者应用类的任何静态成员都会发生静态构造函数的调用。
19、记住C#几个最基本的转换:byte数组到string: ASCIIEncoding encoding = new ASCIIEncoding(); encoding.GetString(byte[]array); Unicode同理;字符串到数值:int.parse(string), float.parse(string); 数值到字符串:object.ToString(); 字符串到字符数组:char[] arry = str.ToCharArray(); 字符数组到字符串:String str = new String(char[] array); 字符串到字节数组: 利用System.Text.Encoding 的 byte[] GetBytes(String str); 字节数组到字符串: String GetString(byte[]array);数值到字节数组:利用System.BitConverter 类的 Byte[] GetBytes(...);字节数组到数值:Toint32 ToSignle ToBoolean
20、记住并熟练使用C#的几个集合类:Array(定长、指定类型、整数下标访问);ArrayList(obj.Add; obj.AddRange; obj.Remove; obj.RemoveAt); Stack(obj.Push,obj.Pop(),obj.Peek; Queue(obj.Enqueue,obj.Dequeue, obj.Peek); Hashtable(obj.add(key,value),key.GetHashCode);SortedList(key数组时排序好的)