[STAThread] 这个是什么意思? 是个什么用法?

时间:2021-07-11 19:25:10
[STAThread]   这个是什么意思?     是个什么用法?

下面的是什么意思?
[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的用处很多,在实际中慢慢体会吧.