【问题标题】:Adding new Namespace in C# Project在 C# 项目中添加新的命名空间
【发布时间】:2016-08-29 19:20:26
【问题描述】:

我想在 C# 项目中添加一个新的命名空间,并且要在新创建的命名空间中添加一些类。

当我右键单击项目的解决方案时,我没有找到任何添加新命名空间的链接,同样通过右键单击项目命名命名空间。

  • 如何向现有项目添加新的命名空间?

  • 是否必须在每个命名空间中都有一个带有 Main Method 的类?

  • 项目名称要与命名空间名称一致,那么如何添加 同一项目中的新用户?

【问题讨论】:

    标签: c# namespaces project add


    【解决方案1】:

    在回答每个问题之前,我想从 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 &gt; New Item &gt; Class 时 - 它会在该文件夹中创建一个类,但它会按照说明为它提供 namespace

    【讨论】:

    • @David--因为我想把我的一些项目类分开,因为它们与图形实现有关,那么在哪里以及如何放置这些类?不在单独的命名空间中?
    • 我会稍微更新一下我的答案,因为我想我对你所处的困境有更好的理解。
    • @David--正如您在更新中建议的那样,将与图形相关的实现放在 CompanyName.Product.Graphs 命名空间中,那么 Graphs 将成为文件夹或命名空间吗?这就是我问我如何在同一个项目中添加一个新的命名空间?
    • @David--对它的意思是命名空间将保持不变,实际上我必须创建不同的文件夹以与文件的关系及其各自的实现相关,然后在这些各自中添加所需的类和接口文件夹。对!
    • @David--谢谢! :)
    【解决方案2】:
    • 如何向现有项目添加新的命名空间? 只需向您的项目添加一个新文件夹,您将在其中放置新类。文件夹名称是命名空间的一部分:[projectname].[foldername]

    • 是否需要在每个命名空间中都有一个带有 Main Method 的类? 没有,完全没有。

    • 项目名称要与命名空间名称相同,那么如何在同一个项目中添加新的呢? 默认情况下,项目名称是命名空间的第一部分。文件夹也是命名空间的一部分,如下所示:[projectname].[foldername].[subfoldername].[etc]

    注意,您始终可以通过覆盖默认生成的命名空间来覆盖类的命名空间:

    namespace Foo.Bar
    {
        public class FooBar
        {
            ...
        }
    }
    

    【讨论】:

    • @ZiNNED--如果我们在新添加的文件夹中添加 4 个类,其中 4 个类中的每一个都必须实现 interface,那么在哪里定义该接口?在每个类中,定义相同的interface?
    • 把接口放在哪里都没有关系。只要您在使用它的类中引用它。接口可以存在于它自己的命名空间或文件夹中,例如[projectname].interfaces。然后在您的类中,您在 using 部分引用该命名空间,如下所示:using [projectname].interfaces;
    • @ZiNNED--如果我们按照您的建议为接口创建一个单独的文件夹,那么我们是否必须首先在该“接口”文件夹中定义一个类,然后在该类中定义一个接口或者我们可以直接在那个文件夹中定义一个接口吗?
    • 可以直接添加接口,右键文件夹,选择Add -> New Item...,然后选择Visual C# -> Code,选择Interface类型。跨度>
    【解决方案3】:

    其实我刚刚在我的WPF项目中遇到过这样的情况。也许,这不是我的情况的确切标题,但是当我搜索它时,我找不到任何合适的解决方案。希望对其他人有所帮助,

    长话短说;

    我在“解决方案”下创建了一个新的 C# 项目。我只是想使用新项目中包含的类定义之一。但是,即使我将以下 sn-p 添加到我的 .xaml 代码中,我也无法使用“路径”。

    xmlns:Path="clr-namespace:namespace;assembly=namespace"
    

    所以我所做的只是将项目添加为对我的领先项目的引用。

    【讨论】:

      猜你喜欢
      • 2016-11-17
      • 1970-01-01
      • 2010-11-28
      • 1970-01-01
      • 1970-01-01
      • 2012-10-17
      • 2014-01-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多