Here's a piece of code for obtaining the time when a .NET assembly was built。请注意这一行:
int secondsSince1970 = System.BitConverter.ToInt32(b, i + c_LinkerTimestampOffset);
此代码提取存储在程序集中的IMAGE_FILE_HEADER
结构的TimeDateStamp
成员。结构定义如下:
typedef struct _IMAGE_FILE_HEADER {
WORD Machine;
WORD NumberOfSections;
DWORD TimeDateStamp;
DWORD PointerToSymbolTable;
DWORD NumberOfSymbols;
WORD SizeOfOptionalHeader;
WORD Characteristics;
} IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER;
和DWORD
定义如下:
typedef unsigned long DWORD;
并且结构描述表明TimeDateStamp
是过去任意时刻以来的秒数,所以它不会是负数。
为什么C#代码使用签名类型int
来存储该无符号值?
答案 0 :(得分:0)
这是因为unsigned int不是符合CLS的变量类型,并且所有.NET库都应遵循公共语言规范。
有关CLS合规性的更多信息:
http://msdn.microsoft.com/en-us/library/12a7a7h3.aspx