C#的命名空间和程序集的有什么区别

C#的命名空间和程序集的有什么区别,第1张

命名空间是类型的一种逻辑命名方案,其中简单类型名称(如 MyType)前面带有用点分隔的层次结构名称。这样的命名方案完全在开发人员的控制之下。例如,键入 MyCompany.FileAccess.A 和 MyCompany.FileAccess.B 在逻辑上将会具有与文件访问相关的功能。.NET 框架使用一种层次结构命名方案,用于将类型按相关功能的逻辑类别进行分组,例如,ASP.NET 应用程序框架或远程处理功能。设计工具可以利用名称空间使开发人员更容易在代码中浏览和引用类型。名称空间的概念与程序集的概念之间没有任何联系。一个程序集可以包含其层次结构名称具有不同名称空间根的类型,而一个逻辑名称空间根可以跨越多个程序集。在 .NET 框架中,名称空间是在设计时进行逻辑命名的便捷方式,而程序集在运行时为类型建立名称作用域。MSDN上一个网友给的解释. http://topic.csdn.net/t/20031101/11/2416910.html

什么是命名空间,为什么要使用命名空间?

命名空间的概念C#中采用的是单一的全局变量命名空间。在这单一的空间中,如果有两个变量或函数的名字完全相同,就会出现冲突。当然,你也可以使用不同的名字,但有时我们并不知道另一个变量也使用完全相同的名字;有时为了程序的方便,必需使用同一名字。比如你定义了一个变量String user_name, 有可能在你调用的某个库文件或另外的程序代码中也定义了相同名字的变量,这就会出现冲突。命名空间就是为解决C#中的变量、函数的命名冲突而服务的。解决的办法就是将你的strTemp变量定义在一个不同名字的命名空间中。就好像张家有电视机,李家也有同样型号的电视机,但我们能区分清楚,就是因为他们分属不同的家庭。当然,我们也可以使用程序开头的using编译指示来使用命名空间中的名字。使用using编译指示的好处在于在程序中不必显式地使用命名空间限制符来访问变量。

什么是命名空间

命名空间是为了把一些类和类的实例更好地管理而定义的把这些类和实体 *** 起来的一个团体,它是_Namespace system class的一个实例,或者是_Namespace类的一个派生类,_Namespace类只有一个属性:Name。通过这个属性用户可以把某个命名空间和其他的命名空间分开来,注意命名空间的Name不能包括头缀和后缀的下划线。

命名空间可以相互联系和组织成一个具有任意层次的由类和类的实例组成的网状结构,这种结构有点象文件系统的树状结构,在同一个层次的情况下,命名空间必须具有互异的名称。

为了表示它们的层次结构你可以用右下线表示这种关系,如下:

Namespace1\Namespace2\Namespace3.....\LastNamespace

虽然说这些命名空间可以表示成这样的层次结构,但是,这些命名空间之间没有类的继承关系,也就是说,子的命名空间中的类不会自动继承父的命名空间中的类。

通常情况下,一个命名空间包含了在某激环境下一系列的类和类的实例。例如那些在Win32下定义和运行的类即使是和其他的命名空间里的类具有相同的名字也不会出现冲突,然而在建立一个新的类的时候,最好还是不要和已经建立的类的名字相同,这为将来WMI发布减少了一些问题。

C#里的命名空间是什么意思?

复制粘贴的,但是值得认真看看,建议楼主认真看看语法书,慢慢来。

命名空间提供了一种组织相关类和其他类型的方式。与文件或组件不同,命名空间是一种逻辑组合,而不是物理组合。在C#文件中定义类时,可以把它包括在命名空间定义中。以后,在定义另一个类,在另一个文件中执行相关 *** 作时,就可以在同一个命名空间中包含它,创建一个逻辑组合,告诉使用类的其他开发人员这两个类是如何相关的以及如何使用它们:

namespace CustomerPhoneBookApp

{

using System

public struct Subscriber

{

Code for struct here...

}

}

把一个类型放在命名空间中,可以有效地给这个类型指定一个较长的名称,该名称包括类型的命名空间,后面是句点(.)和类的名称。在上面的例子中,Subscriber结构的全名是CustomerPhoneBookApp.Subscriber。这样,有相同短名的不同的类就可以在同一个程序中使用了。

也可以在命名空间中嵌套其他命名空间,为类型创建层次结构:

namespace Wrox

{

namespace ProCSharp

{

namespace Basics

{

class NamespaceExample

{

Code for the class here...

}

}

}

}

每个命名空间名都由它所在命名空间的名称组成,这些名称用句点分隔开,首先是最外层的命名空间,最后是它自己的短名。所以ProfessionalCSharp命名空间的全名是Wrox.ProCSharp,NamespaceExample类的全名是Wrox.ProCSharp.Basics.NamespaceExample。

使用这个语法也可以组织自己的命名空间定义中的命名空间,所以上面的代码也可以写为:

namespace Wrox.ProCSharp.Basics

{

class NamespaceExample

{

Code for the class here...

}

}

注意不允许在另一个嵌套的命名空间中声明多部分的命名空间。

命名空间与程序集无关。同一个程序集中可以有不同的命名空间,也可以在不同的程序集中定义同一个命名空间中的类型。

using语句

显然,命名空间相当长,键入起来很繁琐,用这种方式指定某个特定的类也是不必要的。如本章开头所述,C#允许简写类的全名。为此,要在文件的顶部列出类的命名空间,前面加上using关键字。在文件的其他地方,就可以使用其类型名称来引用命名空间中的类型了:

using System

using Wrox.ProCSharp

如前所述,所有的C#源代码都以语句using System开头,这仅是因为Microsoft提供的许多有用的类都包含在System命名空间中。

如果using指令引用的两个命名空间包含同名的类,就必须使用完整的名称(或者至少较长的名称),确保编译器知道访问哪个类型,例如,类NamespaceExample同时存在于Wrox.ProCSharp.Basics和Wrox.ProCSharp.OOP命名空间中,如果要在命名空间Wrox.ProCSharp中创建一个类Test,并在该类中实例化一个NamespaceExa......

嵌套命名空间它的含义是什么,怎么去理解??

一个嵌套命名的空间即是一个嵌套作用域——其作用域嵌套在包含它命名空间内部。嵌套命名空间中的名字遵循常规规则:外围命名空间中声明的名字被嵌套命名空间声明中同一名字的声明所屏蔽。嵌套命名空间内部定义的名字局部于该命名空间。外围命名空间之外的代码只能通过限定名引用嵌套命名空间中的名字,嵌套命名空间可以改进库中代码的组织。

例如:

namespace cpIuspIus_primer{

first nested namespace:

defines the QuerY portion kf the library

namespace QueryLib{

cIass Query{ /* . . . */ }

Query operator&(const Query&, const Query&)

. . .

}

second nested namespace:

defines the SaIes_item portion of the library

namespace Bookstore {

cIass Item_base { /* . . . */ }

cIass BuIK_item : pbIic Item_base { /* . . . */ }

/ / . . .

}

}

命名空间cpIuspIus_primer 现在包含两个嵌套命名的空间:名为QueryLib的命名空间和名为Bookstore的命名空间,当库提供者需要防止库中每个部分的名字与库中其它部分的字冲突的时候,嵌套命名的空间是很有用的。

嵌套命名的空间中成员的名字由外围命名空间的名字和嵌套命名的空间的名字构成。例如:嵌套命名的空间QuerYLib中声明的类的名字是:cpIuspIus_primer : :QueryLib : :Query

这个应该可以帮的到你吧我想............................嘻嘻

C#里的 命名空间是什么意思?

ASP.NET是基于 郸#这门语言的一项技术。

如果你想学ASP.NET C#是必须要学的。

你先搞懂基本语法吧,命名空间 和 类是什么意思 不是你现在需要关心的。

就算给你讲你也听不懂。

如果你真心想学建议你去读书城先买本C#语言入门

c#关于命名空间的含义是什么?作用

命名空间(Namespace)的含义很简单, 就是字面意思: 一个对象名称的有效空间。解决的核心问题是“名字重复”,包括但不仅限于类名称、函数名称、属性名称、变量名称、接口名称等。

打个比方。

ClassA 是个小学的教材命名空间,里面有个方法:Void OnePlusOne() 即“1+1”。 小学肯定是得出结果 1+1 =2 ;

ClassB是个大学教材,里面同样的函数 Void OnePlusOne() 1+1在高等数据、立体几何里就有很多可能性了,所以他结果不一定是2,很有可能是个3.

但是方法是一样的 都叫 "1+1"。 当别人调用的时候,编译器如何区分呢? 就靠NameSpace了。

如果别人需要调用 OnePlusOne方法, 需要先输入命名空间:

ClassA.OnePlusOne() ; 或者ClassB.OnePlusOne()

这样编译器就知道你要用哪个了,避免了重名的问题。

c++命名空间具体表现究竟是什么?怎么定义(不是声明)一个命名空间?std是系统定义的命名空间吗?

#include using namespace stdnamespace NameSpaceAnamespace为关键字,NameSpaceA为定义的命名空间{ int a = 0在NameSpaceA中定义一个a} namespace NameSpaceB定义另一个命名空间{ int a = 1在NameSpaceB中定义一个a,这两个a的访问 namespace NameSpaceC嵌套 { struct Teacher { char name[10]int age}}} int main(){ using namespace NameSpaceA使用方法一:在最前面写上就像using namespace stdprintf("a= %d\n", a)这个a就是NameSpaceA里面的a了 printf("a= %d\n", NameSpaceB::a)使用方法2,空间名::变量 方法一使用Teacher using namespace NameSpaceB::NameSpaceCTeacher t1 = {"aaaaa", 25}方法二使用Teacher NameSpaceB::NameSpaceC::Teacher t2 = {"bbbbbb", 22}return0}另外,std是c++标准命名空间,c++标准程序库中的所有标识符都被定义在std中,比如标准库中的类ostream 、istream等。但是在头文件iostream中并没有声明这一空间,需要程序员手动写上using namespace std; 如果不写,则在使用std::cout<<"hello..."<

命名空间是为了防止使用C++做大型程序的时候发生串包。

欢迎回复讨论

在c++中‘命名空间’是什么意思?‘std::’是什么意思?谢

举个例子吧,我们的名字,有很多时候会重名,比如张三.

世界上可能有几十几百个张三.

我们的世界里当然可以用身份z号码来分啦,但在没有身份z的时代怎么分呢?

有办法的,比如,可以在名字前面加上地方名,如

广东的张三

上海的张三

同样的道理,我们在编程时,不同的程序员可能都会喜欢用同样的名字来表示相同的东西,如,大家可能都会用dog来表示狗类.好了,现在有好几位程序员都写了dog类,可能各自的功能不同或相同.就好比好几家人都养了条狗一样.好了,在程序调用时,编译器傻了,它不知道该拉哪家的狗出来响应呀!

怎么办?哦,让我们在狗前面加上namespace(名字空间)以示区分,好了,于是程序中就有了

张三 的 狗

李四 的 狗

罗嗦了一大堆,该说回来了

std::

std表示是C++的标准命名空间,就是编译系统自带有的,按C++标准定义好了的。

:: 书写格式

比如,在使用输出std::cout时,如果它达不到我们想要的效果,我们也可以自己定义一个名字空间,

取名myspace,再在这个空间里写一个cout函数来实现.调用时,就成了myspace::cout.

在一种类型的前面加上命名空间是什么意思?

防止和系统的类型或方法冲突

C#中名称空间的具体定义是什么?

C#中的类是利用命名空间组织起来的。命名空间提供了一种从逻辑上组织类的方式,防止命名冲突。

命名空间声明

用namespace 关键字用于声明一个命名空间。此命名空间范围允许您组织代码并为您提供了创建全局唯一类型的方法。

namespace name

{

类型定义

}

其中:在命名空间中,可以声明类、接口、结构、枚举、委托 命名空间。

如果未显式声明命名空间,则会创建默认命名空间。该默认的命名空间(有时称为全局命名空间)。全局命名空间中的任何标识符都可用于命名的命名空间中。

命名空间声明可以作为顶级声明出现在编译单元中,当命名空间声明作为顶级声明出现在编译单元中时,该命名空间成为全局命名空间的一个成员。

命名空间声明出现在另一个命名空间声明内时,该内部命名空间就成为包含着它的外部命名空间的一个成员。

无论是何种情况,一个命名空间的名称在它所属的命名空间内必须是唯一的。命名空间隐式地为 public,而且在命名空间的声明中不能包含任何访问修饰符。

嵌套的命名空间

命名空间声明中声明命名空间,各命名空间用”.”分隔。

例如:

namespace N1.N2

{

class A {}

class B {}

}

在语义上等效于

namespace N1

{

namespace N2

{

class A {}

class B {}

}

}

引用类

引用一个类可以用完全限定名来限定引用类(类名前加上命名空间名),以防止命名冲突。

using 指令来导入其他命名空间和类型的名称,直接地而不是通过限定名来引用它们。

Using指令

using 别名指令为一个命名空间或类型启用一个别名。

using 命名空间指令用于导入一个命名空间的类型成员。

(1) using 命名空间指令将一个命名空间中所包含的类型导入到编译单元或命名空间体中,从而可以直接使用这些被导入的类型的标识符而不必加上它们的限定名。

如:

namespace N1.N2

{

class A {}

}

namespace N3

{

using N1.N2

class B

{

public static void Main()

{

A a=new A()

}

}

}

上面的示例中,在 N3 命名空间中N1.N2 的类型成员是直接可用的,不需要完全限定名.

(2)using 命名空间指令导入包含在给定命名空间中的类型,但要注意,它不导入嵌套的命名空间。

示例:

namespace N1.N2

{

class A {}

}

namespace N3

{

using N1

class B

{

public static void Main()

{......

你可以这样看吧,程序集是对象的物理存储结构,命名空间是对象的逻辑存储结构

程序集是一个又一个的文件,里面保存有对象的实现代码,而命名空间是用来对这些对象进行分组的,就如一个班的同学,都在同一个班里,但我们可以对他们分组一样。不同的组你要叫人你就得说“XX组的某某”


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11427085.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存