下面的是什么意思?
[StructLayout(LayoutKind.Explicit)]
下面的[FieldOffset(0)] 这个是什么意思?
public struct IPHeader
{
[FieldOffset(0)] public byte ip_verlen; //I4位首部长度+4位IP版本号
[FieldOffset(1)] public byte ip_tos; //8位服务类型TOS
[FieldOffset(2)] public ushort ip_totallength; //16位数据包总长度(字节)
[FieldOffset(4)] public ushort ip_id; //16位标识
[FieldOffset(6)] public ushort ip_offset; //3位标志位
[FieldOffset(8)] public byte ip_ttl; //8位生存时间 TTL
[FieldOffset(9)] public byte ip_protocol; //8位协议(TCP, UDP, ICMP, Etc.)
[FieldOffset(10)] public ushort ip_checksum; //16位IP首部校验和
[FieldOffset(12)] public uint ip_srcaddr; //32位源IP地址
[FieldOffset(16)] public uint ip_destaddr; //32位目的IP地址
}
在这里,[]代表特性(Attributers)也有译作属性的.在[]中的内容,本身也是一个类,是从System.Attribute派生的类,作用是用来对类型,成员进行注释,有了这个东东,你就可以在运行时通过反射(reflection)来获得这信息.在编译时,这些信息是编译在EXE文件里的,称为元数据,所以在C#中可以创建自我包含,自我描述的组件,而不是像从前的组件,需要在EXE文件之外,保存好多琐碎的信息.
以[STAThread] 为例,当在主函数前面加了这个属性后,CLR在加载这个程序时,就会知道,哦,这个程序主线程是单线程单元模式的线程,在使用RichTextBox之类的COM组件时,就会使用STA模式,否则,CLR就不知道该用哪一种单元模式,因为你没指定...
Attributes的用处很多,在实际中慢慢体会吧.