繁体   English   中英

如何在C#中“包含”定义?

[英]How do I “include” defines in C#?

我是一位C ++程序员,刚开始使用.NET在C#中对Windows应用程序进行编程。

我正在MSDN( https://msdn.microsoft.com/zh-cn/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#代码中定义它? 我的意思不是重用标头,而是在C#中一般如何完成标头。 如果我必须手动复制粘贴这些值,似乎很容易出错。 除此之外,将不完全赞赏输入这些定义的人员所做的辛苦工作!

以相同的方式,C ++尝试使您的代码比C代码更多地分类,使用类而不是函数(对于C而言,按照约定,您将尝试使用相同的长前缀对它们进行分组) ,C#会迫使自己更多地对代码进行分类,以避免更多的刚才针对C ++等效物描述的“全局项”实践。

因此,您想要C#中的常量吗? 好的,只需将其放在一个类中,然后从其他需要它的代码中使用Class.MY_CONSTANT。

但是,在这种特定情况下,似乎有多个常量引用相同的“域”,所以对我来说,它的气味像一个枚举成员。 学习C#枚举,它们非常有用,可以让您拥有比C ++枚举更多的简洁代码。

据我所知,您不能直接在C#中使用C ++头文件。

此外,我更喜欢使用Enum存储此类值。

如果你愿意把一些时间学习这些C#的特点是使用你能做什么的CodeDOM / T4模板来生成C ++头文件C#代码。 这将减少人类复制值的麻烦/错误可能性。

可能已经有一些工具可以提供这些功能,但是由于我不必与过多的非托管代码进行交互,因此我还没有搜索过。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM