我如何 "include" 在 C# 中定义?

How do I "include" defines in C#?

我是一名 C++ 程序员,刚开始使用 .NET 在 C# 中编写 Windows 应用程序。

我正在 MSDN (https://msdn.microsoft.com/en-us/library/chf6fbt4.aspx) 上查看一些示例代码,我看到了以下(部分)代码:

const int LOGON32_PROVIDER_DEFAULT = 0;
//This parameter causes LogonUser to create a primary token.
const int LOGON32_LOGON_INTERACTIVE = 2;

// Call LogonUser to obtain a handle to an access token.
bool returnValue = LogonUser(userName, domainName, Console.ReadLine(),
    LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, out safeTokenHandle);

所以变量LOGON32_PROVIDER_DEFAULTLOGON32_LOGON_INTERACTIVE在示例代码中明确定义。相反,如果我用 C++ 编写此代码,我可以只包含已经定义了这些变量的 Winbase.h:

#define LOGON32_LOGON_INTERACTIVE       2
#define LOGON32_LOGON_NETWORK           3
#define LOGON32_LOGON_BATCH             4
#define LOGON32_LOGON_SERVICE           5
#define LOGON32_LOGON_UNLOCK            7

有没有办法在 C# 中做同样类型的事情?那么,是否有某种魔力使我能够使用 LOGON32_LOGON_INTERACTIVE 而无需自己在 C# 代码中定义它?我的意思不是重用 header,而是在 C# 中一般是如何完成的。如果我必须手动复制粘贴这些值,这对我来说似乎很容易出错。除此之外,它不会完全感谢输入这些定义的人所做的辛勤工作!

据我所知,在C#中不能直接使用C++headers。

此外,我更喜欢使用 Enum 来存储这些值。

如果您愿意花一些时间学习这些 C# 功能,您可以做的是使用 CodeDom/T4 Templates 从 C++ 生成 C# 代码 headers. 这会降低 hassle/error 人类复制值的可能性。

可能已经有一些工具可以提供这些功能,但由于我不必与太多非托管代码交互,所以我没有搜索一个.

以同样的方式,C++ 试图使您的代码比 C 代码更分类,比方说,使用 classes 而不是函数(在 C 的情况下,您会尝试分组,按照惯例,通过使用相同的长前缀),C# 迫使自己更多地对代码进行分类,以避免更多的 "global items" 您刚刚描述的 C++ 等效做法。

因此,您需要 C# 中的常量?很好,就把它放在一个 class 中,然后从其他需要它的代码中使用 Class.MY_CONSTANT。

不过,在这种特殊情况下,似乎有几个常量引用相同的 "domain",所以对我来说闻起来像枚举的成员。学习 C# 枚举,它们非常有用,可以让你拥有比 C++ 等效代码更简洁的代码。