C# 命名空间和程序集
我发现了一些让我思考的东西 我使用System.Windows添加了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
到我的.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使使用灯泡变得简单。是的,我看到了。。。谢谢:)