【发布时间】:2017-08-14 16:04:52
【问题描述】:
C# 和 VB.NET 之间细微的语言差异之一是用于调用 Win32 API 的 DllImportAttribute 是否需要应用于在其标识符中使用尾随“A”或“W”字符声明的方法(该字符代表 ANSI 字符集或 Unicode 字符集。)更准确地说,任何一种语言都允许任何一种做法,但 DllImportAttribute.ExactSpelling 参数的默认值 differs by language。
现在我对此感到惊讶,因为我将 C# 与更面向机器、区分大小写的标识符匹配相关联,而 VB.NET 与更面向人、不区分大小写的标识符匹配相关联,现在这是一个案例默认情况下,C# 允许我进行比 VB.NET 更宽松的匹配。
这种语言差异背后的逻辑是什么?
【问题讨论】:
-
这只是历史,VB 版本早在 C# 出现之前就已经存在。并使用
Declare关键字进行pinvoke。它没有与 ExactSpelling 等效的功能,迫使 VB 程序员显式声明 A 或 W 版本。所以 true 是一个合理的默认值。 -
我猜是为了兼容 VB 的 Declare 语句。