1

下面是一段获取 .NET 程序集构建时间的代码。注意这一行:

int secondsSince1970 = System.BitConverter.ToInt32(b, i + c_LinkerTimestampOffset);

此代码提取存储在程序集中的结构TimeDateStamp成员。IMAGE_FILE_HEADER结构定义如下:

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来存储该无符号值?

4

1 回答 1

0

这是因为 unsigned int 不是符合 CLS 的变量类型,所有 .NET 库都应遵循公共语言规范。

有关 CLS 合规性的更多信息:http:
//msdn.microsoft.com/en-us/library/12a7a7h3.aspx

于 2012-09-28T12:20:59.640 回答