提问人:cpuQs 提问时间:8/11/2023 最后编辑:cpuQs 更新时间:8/11/2023 访问量:65
在 C# 中,类位于命名空间括号内和仅在同一文件中声明命名空间之间有什么区别?[复制]
What is the difference in C# between the class being inside the namespace brackets and just stating the namespace in the same file? [duplicate]
问:
两者之间有区别吗?
namespace Project.Location
{
public class ExampleClass
{
// class stuff ...
}
}
----和--------------------------------------------
namespace Project.Location;
public class ExampleClass
{
// class stuff ...
}
答:
3赞
D Stanley
8/11/2023
#1
在 C# 10 中添加了文件范围的命名空间,您的示例在功能上是等效的。在 C# 10 之前,第二个示例是无效的语法 - 命名空间必须具有作用域括号 ()。{}
0赞
jeb
8/11/2023
#2
你们的例子没有区别。 编译后的代码是等效的。
这是一个叫做
文件范围的命名空间
它从 C# 10 开始可用
namespace Project.Location
{
public class ExampleClass
{
// class stuff ...
}
}
相当于写作
namespace Project.Location;
public class ExampleClass
{
// class stuff ...
}
评论
0赞
JuanR
8/11/2023
这应该是一个评论,而不是一个答案。您基本上已经复制了原始帖子,并添加了一个指向最终可能消失的内容的链接。如何实际解释它是什么,它的作用和局限性?
0赞
jeb
8/11/2023
@JuanR感谢您的考虑。然而,问题是“有什么区别”。而且没有。编译后的代码是等效的。这就是为什么我认为答案完美地解决了这个问题。
0赞
JuanR
8/11/2023
你的答案应该是“没有区别,这就是为什么......”。现在,它显示“它被称为文件范围的命名空间,它从 C#10 开始可用”。
0赞
jeb
8/11/2023
@JuanR我更新了答案。希望现在好些
0赞
JuanR
8/11/2023
好多了,谢谢!
-2赞
Tashmim Tahsan
8/11/2023
#3
这两个代码之间存在差异。第一个代码定义一个命名空间 Project.Location,并在该命名空间中声明一个公共类 ExampleClass。这是在命名空间中组织代码的常用方法,也是 C# 中的正确语法。类 ExampleClass 是 Project.Location 命名空间的一部分。
namespace Project.Location
{
public class ExampleClass
{
// class stuff ...
}
}
第二个代码不定义命名空间,它直接在任何命名空间之外声明一个公共类 ExampleClass。虽然这在语法上是有效的,但这意味着 ExampleClass 不在任何特定的命名空间中。
namespace Project.Location;
public class ExampleClass
{
// class stuff ...
}
最好使用命名空间来组织代码,并避免在大型项目中发生命名冲突。带有命名空间声明的第一个代码是首选方法。
评论
4赞
jeb
8/11/2023
这显然是错误的。第二个代码定义一个命名空间。
0赞
JuanR
8/11/2023
嗨,欢迎来到 SO。这是错误的。我建议您阅读文件范围的命名空间。
0赞
Tashmim Tahsan
8/11/2023
谢谢你指出这一点!感谢您的意见。我的解释基于 C# 的上下文及其命名空间约定。我应该澄清一下,代码片段是在 C# 的上下文中解释的。我很高兴您在 C++ 中提出了“文件范围命名空间”,这是一个有效的考虑因素。这是一个很好的提醒,编程语言有自己的细微差别。再次感谢您加入讨论!
0赞
Abolfazl Pourmohammad
8/11/2023
#4
当文件仅包含一个命名空间时,可以使用不带 {} 的 NameSpace。 实际上,在大多数情况下,我们对每个文件使用一个命名空间,因此这种方法简化了我们的文件,并且我们的显示器上将有更多的空间来编码。
注意:它在 C# 10 之后可用。
评论