Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 命名空间和程序集_C#_.net_Visual Studio 2015 - Fatal编程技术网

C# 命名空间和程序集

C# 命名空间和程序集,c#,.net,visual-studio-2015,C#,.net,Visual Studio 2015,我发现了一些让我思考的东西 我使用System.Windows添加了到我的.cs文件,因为我想使用它 DependencyObject foo 即使我在上更改名称,也无法识别该名称: System.Windows.DependencyObject foo 为了使第一个代码正常工作,我必须将程序集添加到我的项目中 所以,如果我们必须将程序集添加到项目中,为什么要使用?我的意思是,这背后的机制是什么?这两者之间有区别。 假设您在File1.cs中有以下代码: // File1.cs using

我发现了一些让我思考的东西

我使用System.Windows添加了
到我的
.cs
文件,因为我想使用它

DependencyObject foo
即使我在上更改名称,也无法识别该名称:

System.Windows.DependencyObject foo
为了使第一个代码正常工作,我必须将程序集添加到我的项目中


所以,如果我们必须将程序集添加到项目中,为什么要使用
?我的意思是,这背后的机制是什么?

这两者之间有区别。 假设您在
File1.cs中有以下代码:

// File1.cs
using System;
namespace Outer.Inner
{
    class Foo
    {
        static void Bar()
        {
            double d = Math.PI;
        }
    }
}
现在,假设有人向项目中添加另一个文件
(File2.cs)
,如下所示:

// File2.cs
namespace Outer
{
    class Math
    {
    }
}
编译器在查找那些使用命名空间之外的语句之前先搜索Outer,因此它会查找Outer.Math而不是System.Math。不幸的是(或者幸运的是?),Outer.Math没有PI成员,所以File1现在被破坏了

如果将using放在名称空间声明中,则会发生如下变化:

// File1b.cs
namespace Outer.Inner
{
    using System;
    class Foo
    {
        static void Bar()
        {
            double d = Math.PI;
        }
    }
}
现在编译器在搜索外部之前搜索系统,找到System.Math,一切正常

有些人会争辩说,对于用户定义的类来说,数学可能是一个坏名字,因为系统中已经有了一个;这里的要点是有区别,它会影响代码的可维护性


注意如果Foo位于名称空间Outer而不是Outer.Inner中,会发生什么也很有趣。在这种情况下,在File2中添加Outer.Math会破坏File1,无论使用到哪里。这意味着编译器在查看任何using语句之前先搜索最里面的封闭命名空间。

必须添加程序集才能使用该程序集中的类。将程序集添加到项目后,如果不添加using语句,则必须始终使用完全限定名引用该程序集中的类,例如System.Windows.DependencyObject。添加using语句后,可以仅使用其类名引用类,例如DependencyObject。换句话说,using语句只是提供了一种引用类的较短方式。

using
不会为您添加程序集。并且只能使用项目中引用的程序集

当您创建一个.net项目时,如果自动为您添加一些程序集,并且如果您需要使用其中的任何其他程序集,则需要添加它们。首先添加世界上所有的参考文献是不可行的


打个比方,你是厨师,需要准备一些菜。您只能使用厨房里的物品来准备菜肴,如果您需要一些其他没有的配料,您可以从商店购买,然后使用。想象一下,世界上所有的食材都在你的厨房里

using指令只是有助于避免在源代码中键入完整的类型名。并且只应用于命名空间名称,而不应用于程序集名称。你不能使用你没有引用的东西,你必须告诉编译器它来自哪里。VS2015使使用灯泡变得简单。是的,我看到了。。。谢谢:)