为什么C#没有头文件?命名空间会处理所有事情吗?

问题描述 投票:0回答:3

谁能说清楚C#中头文件和命名空间的用法吗?

因为在C++中我使用

******.h
文件来读取库函数。当我看到一些 C# 示例程序时,它们丢失了,谁能告诉我为什么?

我正在使用 C# 为 CAD 应用程序开发自定义工具。每当我使用适当的函数打开文件(CAD 文件)时,编译器都会给我一个错误,指出我提供的函数名称在上下文中不可用。这里的上下文是什么意思?

当我打开该 CAD 应用程序的帮助文件时,负责打开该文件的函数已在名为

uf_part.h
的头文件下提及。但是有一个名为
NXOpen
的命名空间。

我在 Visual Basic 中将命名空间用作

using NXOpen
,这还不够吗?我还需要提供该头文件吗?如果是的话,怎么办?

c# namespaces header-files nxopen
3个回答
30
投票

C# 更“程序员友好”。当处理同一个项目的文件时,它不会每次都手动指定“头文件”,而是根据命名空间去所有项目文件中查找匹配的内容。

要了解这一点,请执行以下步骤:

  1. 在 Visual Studio 中启动新项目。 (无论什么类型,WinForms还是Console)
  2. 右键单击项目并添加新类。
  3. 在主类笔记中,您可以看到刚刚添加的新类,而无需添加任何标题。

这是如何做到的?只需让两个类具有相同的命名空间即可。 .NET 引擎足够智能,可以将所有这些类链接在一起。

现在,当谈到external代码意味着位于不同DLL文件中的代码时,技巧是添加对该DLL的引用(在Studio中-->右键单击项目-->添加引用-->浏览)然后你需要通过在顶部添加 using 语句来指定您要使用该 DLL:

using ExternalDllName.ExternalNamespace;

就是这样。与 C++ 不同,您不需要

.h
文件,因为 .NET 将自动搜索引用的 DLL 文件以进行匹配。


11
投票

.net 中不存在头文件之类的东西,因为所有需要的元数据都包含在引用的程序集本身中。

您是否在项目中引用了所需的组件? 另请注意,C# 中没有“函数”之类的东西,只有类方法(这意味着您必须在调用中指定对象或静态类)。

另外:C# 程序的一般结构


10
投票

现代语言(例如 C# 或 Java)的编译器在已编译文件中存储有关它们所包含的类和方法的信息,并且此信息可用于检查从一个源文件到另一个源文件或库类的调用的正确性。

当C发明时,磁盘空间、内存和CPU能力都是宝贵的资源,这种方法是不可能的。引入头文件是为了允许编译器检查不同的源文件是否符合相同的接口。当 C++ 发明时,上述方法本来是可能的,但我想出于兼容性原因,选择坚持使用 C 方法。

© www.soinside.com 2019 - 2024. All rights reserved.