如果 BIGENDIAN 在编译时未解析,为什么它是一个指令?
Why is BIGENDIAN a directive if it's not resolved at compile-time?
请原谅措辞不佳,但我找不到更好的解释方式。
根据我的理解,C# 是一种 WORA 语言 - 您可以在一台机器上编写它并在另一台机器上部署它,因为 MSIL 直到应用程序实际 运行.
那为什么定义BitConverter.IsLittleEndian
like so:
#if BIGENDIAN
public static readonly bool IsLittleEndian /* = false*/;
#else
public static readonly bool IsLittleEndian = true;
#endif
BIGENDIAN
这里是一个预处理器指令,这意味着它是在编译时解析的。所以如果开发者的机器是little endian,而target使用big endian,会不会IsLittleEndian
在目标机器上还是报true
?
不,它会按预期工作。它会工作的原因是因为安装在目标系统上的 .NET 运行时对于该目标系统是 built/compiled,所以它是 BitConverter.IsLittleEndian
属性 将 return false
.您的代码只是引用 属性,因此直到运行时才确定。
请原谅措辞不佳,但我找不到更好的解释方式。
根据我的理解,C# 是一种 WORA 语言 - 您可以在一台机器上编写它并在另一台机器上部署它,因为 MSIL 直到应用程序实际 运行.
那为什么定义BitConverter.IsLittleEndian
like so:
#if BIGENDIAN
public static readonly bool IsLittleEndian /* = false*/;
#else
public static readonly bool IsLittleEndian = true;
#endif
BIGENDIAN
这里是一个预处理器指令,这意味着它是在编译时解析的。所以如果开发者的机器是little endian,而target使用big endian,会不会IsLittleEndian
在目标机器上还是报true
?
不,它会按预期工作。它会工作的原因是因为安装在目标系统上的 .NET 运行时对于该目标系统是 built/compiled,所以它是 BitConverter.IsLittleEndian
属性 将 return false
.您的代码只是引用 属性,因此直到运行时才确定。