【发布时间】:2016-08-29 19:20:26
【问题描述】:
我想在 C# 项目中添加一个新的命名空间,并且要在新创建的命名空间中添加一些类。
当我右键单击项目的解决方案时,我没有找到任何添加新命名空间的链接,同样通过右键单击项目命名命名空间。
如何向现有项目添加新的命名空间?
是否必须在每个命名空间中都有一个带有 Main Method 的类?
项目名称要与命名空间名称一致,那么如何添加 同一项目中的新用户?
【问题讨论】:
标签: c# namespaces project add
我想在 C# 项目中添加一个新的命名空间,并且要在新创建的命名空间中添加一些类。
当我右键单击项目的解决方案时,我没有找到任何添加新命名空间的链接,同样通过右键单击项目命名命名空间。
如何向现有项目添加新的命名空间?
是否必须在每个命名空间中都有一个带有 Main Method 的类?
项目名称要与命名空间名称一致,那么如何添加 同一项目中的新用户?
【问题讨论】:
标签: c# namespaces project add
在回答每个问题之前,我想从 MSDN 分享这个:
namespace关键字用于声明包含一组相关对象的范围。您可以使用命名空间来组织代码元素并创建全局唯一类型。
问题 1
如何为现有项目添加新的命名空间?
当您创建一个类时,您几乎可以将它放置在您想要的任何命名空间中,它可以是完全组成的,也可以是已经存在的。
namespace Something.That.No.One.Else.Has
{
public class FooBar() { }
}
现在,这个Something.That.No.One.Else.Has 命名空间在我的整个应用程序中都可用。而且我需要使用using 语句来消费FooBar 类,除非消费类在同一个命名空间中。
问题 2
是否需要在每个命名空间中都有一个带有 Main Method 的类?
不,语言中没有强制执行此操作的要求。您可能正在考虑将static void Main 替换为.exe。
问题 3
项目名称要与命名空间名称相同,那么如何在同一个项目中添加新的?
正如我在 answer 1 中提到的,您可以简单地创建一个您认为合适的 namespace。我建议出于组织原因开始一个新项目,因为它可能会让任何开始在您的源代码中工作的人感到困惑。
当您创建一个新项目时,遵循的命名约定是将项目的默认命名空间设置为项目的名称。
更新
听了OP的意见后,我想我对困境有了更好的理解。
在您的项目中,您应该创建一个与文件关系及其各自实现相关的文件夹结构。关注 Microsoft 推荐的 practices and patterns。
<Company>.(<Product>|<Technology>)[.<Feature>][.<Subnamespace>]
.
+-- Graphs
| +-- SomeGraphClass.cs // in CompanyName.Product.Graphs namespace
| +-- ...
+-- Data
| +-- SomeDataClass.cs // in CompanyName.Product.Data namespace
| +-- ...
+-- Interfaces
| +-- IFooBar.cs // in CompanyName.Product.Interfaces namespace
| +-- ...
更新 2
文件夹结构(默认)决定了类的namespace。例如,当您右键单击文件夹和 Add > New Item > Class 时 - 它会在该文件夹中创建一个类,但它会按照说明为它提供 namespace。
【讨论】:
CompanyName.Product.Graphs 命名空间中,那么 Graphs 将成为文件夹或命名空间吗?这就是我问我如何在同一个项目中添加一个新的命名空间?
如何向现有项目添加新的命名空间? 只需向您的项目添加一个新文件夹,您将在其中放置新类。文件夹名称是命名空间的一部分:[projectname].[foldername]
是否需要在每个命名空间中都有一个带有 Main Method 的类? 没有,完全没有。
项目名称要与命名空间名称相同,那么如何在同一个项目中添加新的呢? 默认情况下,项目名称是命名空间的第一部分。文件夹也是命名空间的一部分,如下所示:[projectname].[foldername].[subfoldername].[etc]
注意,您始终可以通过覆盖默认生成的命名空间来覆盖类的命名空间:
namespace Foo.Bar
{
public class FooBar
{
...
}
}
【讨论】:
interface,那么在哪里定义该接口?在每个类中,定义相同的interface?
[projectname].interfaces。然后在您的类中,您在 using 部分引用该命名空间,如下所示:using [projectname].interfaces;。
Add -> New Item...,然后选择Visual C# -> Code,选择Interface类型。跨度>
其实我刚刚在我的WPF项目中遇到过这样的情况。也许,这不是我的情况的确切标题,但是当我搜索它时,我找不到任何合适的解决方案。希望对其他人有所帮助,
长话短说;
我在“解决方案”下创建了一个新的 C# 项目。我只是想使用新项目中包含的类定义之一。但是,即使我将以下 sn-p 添加到我的 .xaml 代码中,我也无法使用“路径”。
xmlns:Path="clr-namespace:namespace;assembly=namespace"
所以我所做的只是将项目添加为对我的领先项目的引用。
【讨论】: