在C#中如何引用程序集和命名空间
我来给你讲讲吧:
什么是程序集?
程序集是一个 DLL,你想使用其中的类,就必须要将该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 只是为了使你的后续编码工作简单而易。
c# internal 有的说当前命名空间可访问,有的说当前程序集(项目)可访问?命名空间与程序集不同吧?
命名空间与程序集是两码事。
internal与public等都是限制成员的访问权限。
public修饰的成员可以被其它程序集所访问。
但internal修饰的成员只能被该成员所在的程序集访问。
命名空间就只是命名而已,就像人的命名,叫什么都无所谓,只要你喜欢。只要有权限,就可以访问到任何命名空间里的成员。
不同的程序集里可以有相同的命名空间的。命名你可以乱命名的。只要你访问方便。
什么是命名空间,为什么要使用命名空间?
命名空间的概念C#中采用的是单一的全局变量命名空间。在这单一的空间中,如果有两个变量或函数的名字完全相同,就会出现冲突。当然,你也可以使用不同的名字,但有时我们并不知道另一个变量也使用完全相同的名字;有时为了程序的方便,必需使用同一名字。比如你定义了一个变量String user_name, 有可能在你调用的某个库文件或另外的程序代码中也定义了相同名字的变量,这就会出现冲突。命名空间就是为解决C#中的变量、函数的命名冲突而服务的。解决的办法就是将你的strTemp变量定义在一个不同名字的命名空间中。就好像张家有电视机,李家也有同样型号的电视机,但我们能区分清楚,就是因为他们分属不同的家庭。当然,我们也可以使用程序开头的using编译指示来使用命名空间中的名字。使用using编译指示的好处在于在程序中不必显式地使用命名空间限制符来访问变量。