命名空间的概念及作用?用什么属性定义命名空间
今天给各位分享命名空间的概念及作用的知识,其中也会对用什么属性定义命名空间进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
命名空间的含义是什么
什么是命名空间,为什么要使用命名空间?
命名空间的概念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 std;namespace 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 std; printf("a=%d\n", a);这个a就是NameSpaceA里面的a了 printf("a=%d\n", NameSpaceB::a);使用方法2,空间名::变量方法一使用Teacher using namespace NameSpaceB::NameSpaceC; Teacher 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::’是什么意思?谢
举个例子吧,我们的名字,有很多时候会重名,比如张三.
世界上可能有几十几百个张三.
我们的世界里当然可以用身份证号码来分啦,但在没有身份证的时代怎么分呢?
有办法的,比如,可以在名字前面加上地方名,如
广东的张三
上海的张三
同样的道理,我们在编程时,不同的程序员可能都会喜欢用同样的名字来表示相同的东西,如,大家可能都会用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()
{......
c#泛型有什么作用
关于object类型:
1.object类型可以来引用任何类型的实例;
2.object类型可以存储任何类型的值;
3.可以定义object类型的参数;
4.可以把object作为返回类型。
但是--这样做有很大的问题
1.会因为程序员没有记住使用的类型而出错,造成类型不兼容;
2.值类型和引用类型的互化即装箱拆箱使系统性能下降。
C#2.0提出的泛型就是避免强制类型转换,减少装箱拆箱提高性能,减少错误。
System.Collections.Generic命名空间提供许多集合类和接口的泛型版本。
所谓泛型:
即通过参数化类型来实现在同一份代码上操作多种数据类型。泛型编程是一种编程范式,它利用“参数化类型”将类型抽象化,从而实现更为灵活的复用。
C#泛型赋予了代码更强的类型安全,更好的复用,更高的效率,更清晰的约束。
C#泛型能力由CLR在运行时支持,区别于C++的编译时模板机制,和java的编译时的“搽拭法”。这使得泛型能力可以在各个支持CLR的语言之间进行无缝的互操作。
C#泛型代码在被编译为IL和元数据时,采用特殊的占位符来表示泛型类型,并用专有的IL指令支持泛型操作。而真正的泛型实例化工作以“on-demand”的方式,发生在JIT编译时。
C#泛型编译机制如下:
第一轮编译时,编译器只为Stack类型产生“泛型版”的IL代码和元数据,并不进行泛型类型的实例化,T在中间只充当占位符。
JIT编译时,当JIT编译器第一次遇到Stack时,将用int类型替换“泛型版”IL代码与元数据中的T--进行泛型类型的实例化。
CLR为所有类型参数为“引用类型”的泛型类型产生同一份代码,但如果类型参数为“值类型”,对每一个不同的“值类型”,CLR将为其产生一份独立的代码。
C#泛型的几个特点
如果实例化泛型类型的参数相同,那么JIT编译器会重复使用该类型,因此C#的动态泛型能力避免了C++静态模板可能导致的代码膨胀的问题。
C#泛型类型携带有丰富的元数据,因此C#的泛型类型可以应用于强大的反射技术。
C#的泛型采用“基类、接口、构造器、值类型/引用类型”的约束方式来实现对类型参数的“显示约束”,提高了类型安全的同时,也丧失了C++模板基于“签名”的隐式约束所具有的高灵活性。
C#泛型类在编译时,先生成中间代码IL,通用类型T只是一个占位符。在实例化类时,根据用户指定的数据类型代替T并由即时编译器(JIT)生成本地代码,这个本地代码中已经使用了实际的数据类型,等同于用实际类型写的类,所以不同的封闭类的本地代码是不一样的。按照这个原理,我们可以这样认为:泛型类的不同的封闭类是分别不同的数据类型。
这样泛型不仅更加灵活,也同时将代码的简便和提高到一个层次!不用再为具体不同的重载方法写具体的代码了!
C#泛型是开发工具库中的一个无价之宝。它们可以提高性能、类型安全和质量,减少重复性的编程任务,简化总体编程模型,而这一切都是通过优雅的、可读性强的语法完成的。尽管 C#泛型的根基是 C++模板,但 C#通过提供编译时安全和支持将泛型提高到了一个新水平。C#利用了两阶段编译、元数据以及诸如约束和一般方法之类的创新性的概念。毫无疑问,C#的将来版本将继续发展泛型,以便添加新的功能,并且将泛型扩展到诸如数据访问或本地化之类的其他.NET Framework领域。
当然,C#的泛型还很多应用,现在我还只是了解了它的机制和原理,在接下来的学习中我会系统得学习泛型所支持的抽象泛型,接口泛型,结构和委托等!
具体的建议你看一下《deep in C#》这本书,上面解释的很生动,很有趣。中文翻译版的叫《深入理解C#》(第二版)。
关于命名空间的概念及作用,用什么属性定义命名空间的介绍到此结束,希望对大家有所帮助。