我如何 "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_DEFAULT
和LOGON32_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++ 等效代码更简洁的代码。
我是一名 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_DEFAULT
和LOGON32_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++ 等效代码更简洁的代码。