我想在任何.cs源文件的内容上强制使用根命名空间,这些文件没有将其内容包装在显式中namespace.换句话说,我希望将类和其他命名空间级结构保留在默认命名空间之外.
(使用Visual Studio在Windows .NET环境中工作)
在下面的示例中,我希望默认情况下将Car类强制进入MotorIndustry命名空间,即使它没有明确的命名空间编码.
Vehicle.cs(有命名空间)
namespace MotorIndustry {
public class Vehicle {
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
Car.cs(没有命名空间/默认)
public class Car : Vehicle {
//...
}
Run Code Online (Sandbox Code Playgroud)
有没有办法通过Visual Studio,AssemblyInfo.cs文件或其他方式中的项目设置来完成这个"根命名空间"修改行为?
我的理解是VB.NET有这样的功能,但C#的行为有何不同?
关于为什么我这样问的一些背景:我有数百个类,程序员忘了将命名空间包装在一些.当我从其他项目引用程序集时,它会使用最终导致一些模糊情况的类来污染默认命名空间.
我有一个自由函数,foo在名称空间N中定义。的标头foo位于全局包含搜索路径中,因此任何人都可以通过包括来调用它foo.h。
foo调用另一个本地自由函数foo1,该函数在中定义foo.cpp。
// foo.h
namespace N
{
void foo();
}
// foo.cpp
#include "foo.h"
namespace
{
// declare in the unnamed namespace?
void foo1()
{
// do some stuff
}
}
namespace N
{
// declare in namespace N?
void foo1()
{
// do some stuff
}
void foo()
{
foo1();
}
} // N
Run Code Online (Sandbox Code Playgroud)
我应该放入foo1未命名的名称空间还是namespace N?还是没关系?
更新
我想将范围限制foo1为foo.cpp。
以下代码不能在 C++17 中编译,而是在 C++20 中编译:
#include <tuple>
int main() {
auto t = std::make_tuple(1, 2);
get<0>(t); // no std:: required!
return 0;
}
Run Code Online (Sandbox Code Playgroud)
由于这适用于 g++ 和 clang++ 以及两者-stdlib=libc++,-stdlib=libstdc++甚至在 msvc 中/std:c++20,我想知道这是否是一个“功能”。这背后的理由是什么?除此之外还有对全局命名空间的更多污染吗?
我遇到以下情况:
我正在建立一个铁路站点.我有两个名为User的类.一个是ActiveRecord,另一个是我想用来播种我的数据库的自定义类.题:
我可以从名为User的自定义类中引用名为User的ActiveRecord类吗?
所以我有 VS 2022 并且正在尝试学习 C#。
我收到功能错误
“文件范围的命名空间”在 C# 7.3 中不可用,请使用语言 10.0 或更高版本。
我发现可以转到“选项”>“代码样式”>“文本编辑器”并更改为“文件范围”。做过某事。
当我创建解决方案时,我选择了空白解决方案,然后使用 .NET Framework 4.8 添加了一个空项目,接下来我添加了一个代码文件最后我添加了以下内容:
namespace Averages;
public static class TestClass
{
}
Run Code Online (Sandbox Code Playgroud)
我得到了错误。我到底错过了什么?我很困惑。编辑:我刚刚检查过。我有.NET 7.0
注意:我自己几乎都是初学者.这个问题集中在C++的使用上,因为这是我遇到的唯一语言.
在using namespace std;为C++提供的代码示例中使用Stack Overflow似乎已达成共识.我最初是以这种方式学习的,并且从未被教过为什么以后这是一个问题.
我只是想知道为什么人们在他们的示例代码中使用前缀std ::有问题.声明全局命名空间似乎是反复无常的,特别是因为许多提问者将示例中的代码复制+粘贴到他们的IDE中.命名空间是一个高级编程概念,但我认为最好为std ::添加前缀,然后在初学者询问时解释它.
为什么这种用法教会初学者是否可以接受?
到目前为止,我已经在C++上学过两门课,每门课都在不同的学校,并且他们都使用了'using namespace std;' 教基础编程.这可能是巧合,但我不得不自己去找出这样做不好的做法.