引用和using的关系

引用的是程序集,using的是命名空间。

简单的说:
项目里添加引用就是确定被引用文件的路径,using就是在代码中激活相应namespace。总之是两个不同的概念:一个是项目文件相关、一个是语法相关。

第一种解释:
添加引用是using的必备条件
只有添加了对程序集的引用,此程序集内的命名空间才能被using
项目添加引用的目的是引入程序集   程序集的概念是什么?
程序集是一个 DLL,这是调用其中类的必备条件   一个程序集包括一个或多个命名空间   举例来说
命名空间 System.Data 来自文件 System.Data.DLL
命名空间 System.Data.SqlClient 同样来自 System.Data.DLL
那么意味着你一旦添加了 System.Data 程序集 文件的引用(无论你是从 GAC 添加还是直接添加的 DLL 到项目)
你就可以使用 System.Data 和 System.Data.SqlClient 下的各种类
为什么要 using 呢?
简单地说,你甚至可以不用写一个 using,凡是需要用到类型的地方用完全限定名。
什么是完全限定名?
比如数据集类 DataSet:System.Data.DataSet 就是它的完全限定名。
比如数据库连接类 SqlConnection:System.Data.SqlClient.SqlConnection 就是它的完全限定名。
用了 using 的好处在于:你不必处处写完全限定名,这样会使代码看起来过于冗长。   说到这里,using 的作用明白了吗?其实就是起到了简写的作用。
真正的引用工作是一开始做的,using 只是为了使你的后续编码工作简单而易。
至于你提到的需要 using 才能用,
说到底就是因为你正在使用的类写了不完整的类名称(即非完全限定名),   系统不知道这个类来自哪里,
系统会在所有的 using 下去找到这个类的出处,   如果没有 using,自然找不到。
最后举个例:
你需要定义一个数据集,
方法一
using System.Data;   然后
DataSet mySet = new DataSet();
方法二:   没有 using
wk_ad_begin({pid : 21});wk_ad_after(21, function(){$(‘.ad-hidden‘).hide();}, function(){$(‘.ad-hidden‘).show();});
直接
System.Data.DataSet mySet = new System.Data.DataSet();
当然,两种方法都要求你对项目添加了对 System.Data 的引用   从实现上,这两种方式都是可行的,但是你是否觉得第一种更简洁
自己实践一下!

第二种解释:
引用是程序集对另外一个程序集的一个引用;A引用B,表示A需要有B程序集存在才能正常工作,有可能的原因包括:资源上的,代码上的等等;总之如果查找不到这个程序集B,程序集A将无法启动。
using,是在某一个代码单元中,表示出对某一个命名空间的引用,使你的代码在无需完整名称的情况下,使用这个命名空间中的名称。
比如:在你引用的一个程序集B中,有一段代码是这样定义的:
namespace B.1.2.3.4.5.6.7
{
public class BClass{}
}
当然在实际的应用中命名空间可能没有这么复杂,我写这么多只是说明为什么要使用using。
在你的程序集A中的某一个代码单元中,你有两种方式使用这个BClass,
方案1:使用完整名称
B.1.2.3.4.5.6.7.BClass   bc = new B.1.2.3.4.5.6.7.BClass();    //使用完整的名称:命名空间.类名
方案2:使用using
using B.1.2.3.4.5.6.7;   //“引入"这个命名空间
BClass bc = new B.Class();
using还有一种特殊的用法,它并不引入命名空间,而是一个别名。用途,我给个例子吧。
namespace B.1.2.3.4.5.6
{
public class String{}
}
在B.1.2.3.4.5.6空间中定义了一个string类,并且无法修改这个类的代码(主要是指不能修改类string的名字)。
如果你需要使用这个类,你可以用上面提到的方案1,但是特别麻烦。因为命名空间太长了。
如果你使用方案2,则String这个类会和系统的String为产生冲突,导致所有使用string的地方无法通过编译。
使用using的这个特殊用法解决这个问题是这样的:
using B.1.2.3.4.5.6 = B6;
上面的代码,给命名空间定义了一个别名B6。
然后你在代码中按方案一的方法使用类string,只是你可以这样使用:
B6.String s = new B6.String();
是不是简单多了?
当然你还是可以用完整名称。
B.1.2.3.4.5.6 s = new B.1.2.3.4.5.6.String();
这个使用方式总是有效的。
说了这么多,希望你有一个明确的认识了。

时间: 2024-08-28 23:27:20

引用和using的关系的相关文章

深刻理解Java中形参与实参,引用与对象的关系

声明:本博客为原创博客,未经允许,不得转载!原文链接为http://blog.csdn.net/bettarwang/article/details/30989755 我们都知道,在Java中,除了基本数据类型之外,其他的都是引用类型,当它们作为函数参数时,传递的也是引用,通过引用可以改变对象的值,很多人便因此而忽略形参与实参,引用与对象的关系问题.废话不多说,先看下面一个例子: import java.util.*; public class Student { private String

DOM操作与引用资源的前后关系

在网站开发过程中遇到这样的一个问题:在主页面中使用angular-ui-route来路由加载其他页面(tpl_main.html),在其他页面中使用了swiper,但是显示的时候并没有达到预想的能有手动拖拽显示的立体效果,页面进行错误排查,最后发现的问题是由于在由ui-route引入的页面中使用的swiper与主页面中引用jquery(swiper依赖于jquery)前后位置出现了问题,导致swiper不能正常使用,下面请看具体的错误与解决方案! 首先我们来看下在原先错误的情况下的代码: 这个是

引用与多态的关系

引用是除指针外另一个可以产生多态效果的手段,一个基类的引用可以指向它的派生类实例. 1 class A; 2 class B : class A{}; 3 B b; 4 A& ref = b;

违反了引用完整性约束: 在此关系的主对象和依赖对象之间,定义引用约束的属性值不一致

修改时在view页面使用修改关联表字段,导致提交时不仅更新当前表,也自动更新关联表,引发上述错误,重点检查View Edit 或Create页面有无类似下面的语句 @Html.EditorFor(model => model.xxxx.yyyyy, new { htmlAttributes = new { } })    xxxx就是引用了关联表

c++的引用与指针的关系详解

[TOC]#1.引用的概念及用法概念:引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样.     温馨提示:引用不是定义一个新的变量定义的格式为:    类型 &引用变量名 = 已定义过的变量名;用法:举个例子: int a = 5; int& b = a; 这就是引用,b引用a,b是a的别名. #2.引用做参数我们在C语言中经常用指针做参数: Func(int *a) ; int main() { int arr[1000]; Func(arr); } 像这种情况

Objective-C内存管理之引用计数

初学者在学习Objective-c的时候,很容易在内存管理这一部分陷入混乱状态,很大一部分原因是没有弄清楚引用计数的原理,搞不明白对象的引用数量,这样就当然无法彻底释放对象的内存了,苹果官方文档在内存管理这一部分说的非常简单,只有三条准则: 当你使用new.alloc或copy方法创建一个对象时,该对象的保留指针为1,当不再使用该对象的时候,你应该想该对象发送一条release或autorelease消息,这样,该对象在其寿命结束时将被销毁. 当你通过其他方法获得一个对象时,假设该对象的保留计数

Java引用总结--StrongReference、SoftReference、WeakReference、PhantomReference

http://www.cnblogs.com/skywang12345/p/3154474.html 1 Java引用介绍 Java从1.2版本开始引入了4种引用,这4种引用的级别由高到低依次为:    强引用  >  软引用  >  弱引用  >  虚引用 ⑴强引用(StrongReference)    强引用是使用最普遍的引用.如果一个对象具有强引用,那垃圾回收器绝不会回收它.当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回

UML类图与类的关系详解

在画类图的时候,理清类和类之间的关系是重点.类的关系有泛化(Generalization).实现(Realization).依赖(Dependency)和关联(Association).其中关联又分为一般关联关系和聚合关系(Aggregation),合成关系(Composition).下面我们结合实例理解这些关系. 基本概念 类图(Class Diagram): 类图是面向对象系统建模中最常用和最重要的图,是定义其它图的基础.类图主要是用来显示系统中的类.接口以及它们之间的静态结构和关系的一种静

关于“引用”的那些事儿

1.引用的概念 什么是引用,通俗地讲就是为某个目标变量起个别名(alias),对引用的操作和对目标变量的操作结果完全相同. 2.申明和使用引用”需要注意的问题 申明一个引用时,切记要对其进行初始化.引用声明完毕后,相当于目标变量有两个名称,即该目标变量的原名和引用名,不能再把该引用名作为其它变量的别名.申明一个引用,不是新定义一个变量,它只是目标变量的一个别名,它本身不是一种数据类型,因此引用本身不占存储单元,系统不会给引用分配存储单元.还有一点:不能建立数组的引用. 3.“引用”作为函数参数