精华内容
下载资源
问答
  • 其实学C#很久都没有弄明白命名空间、函数、变量的关系,现在大致捋一下,如下图: 1)命名空间 namespace 中可包含多个 class,命名空间将这些打包起来。一个命名空间想调用另一个命名空间中的时,就需要...

    其实学C#很久都没有弄明白命名空间、类、函数、变量的关系,现在大致捋一下,如下图:

    1)命名空间 namespace 中可包含多个类 class,命名空间将这些类打包起来。一个命名空间想调用另一个命名空间中的类时,就需要首先使用using+命名空间名字 声明命名空间。有点类似于C里面的 #include。

    2)通过class关键字定义,如下图的Form1。在类中有变量和函数。变量和函数不能写到命名空间中哦。

    3)函数,可以算是类的功能,一个类中通常有多个函数,实现多种功能。就比如电视机是一个类,然后电视机这个类的函数也就是它的功能就有,播放视频、发出声音、换台,等等。要注意的是,在类中通常我们会看到一个和类同名的函数,它没有返回值,也通常没有输入参数(形参),如图中的public Form1(),这个函数叫做构造函数,它的作用一般就是初始化类的一些成员变量,默认是没有形参的,不过如果有需要可以将其重载为有形参的(直接添加所需形参)。其他的与类不同命,且具有返回值的函数叫做类的成员函数,实现各种类的功能。

    4)变量,定义在类里面但是在函数外面的变量称为成员变量,它在整个类中一直存在;定义在函数内部的变量叫做局部变量,只存在于当前函数中。成员变量占用的内存比局部的大,只需要在函数里面用一下的变量一般定义为局部就好了。关于内存占用的问题以后找时间再总结一下。

    嗯,基本就是这样啦,简单的捋一下自己的理解也更加清晰了,比心~


    展开全文
  • 命名空间与头文件的关系

    千次阅读 2017-03-15 20:34:10
    一个命名空间是一个作用域,命名空间可以包含、对象、函数、模板其他作用域。 一个文件可以包含多个命名空间,一个命名空间也可以分布在多个文件中。 文件中的命名空间分割文件全局作用域,而仅仅包含文件,...

    一个命名空间是一个作用域,命名空间可以包含类、对象、函数、模板和其他作用域。

    一个文件可以包含多个命名空间,一个命名空间也可以分布在多个文件中。

    文件中的命名空间分割文件的全局作用域,而仅仅包含文件,只能直接访问到该文件的全局作用域,而想访问该文件中某个命名空间下的对象等实体,就需通过包含文件,再通过命名空间(局部作用域)来访问该实体。

    本文转载自:https://zhuanlan.zhihu.com/p/22469139

    个人阅读理解:

    这几句话对头文件和命名空间的关系解释的比较透彻,比网上很多长篇大论地扯淡强多了,所以引用了过来。

    之前有点不理解既然有了命名空间,还要头文件做什么?  猛然醒悟:头文件就是命名空间的载体啊,就像函数得写在cpp中,命名空间的语句也得写在头文件中啊。

    C语言中并没有命名空间的概念,这有个弊端,比如甲写的程序中头文件A.h中有个函数sum,乙写的程序文件中头文件B.h中也有个函数sum。那么要是在某个程序中用了这两个头文件,就会发生冲突。引入命名空间以后可以很方便地解决这个问题。

    A.h如下:

    #ifndef A_

    #define A_

    namespace jia

    {

    sum(int a,int b);

    }

    #endif

    B.h中如下:

    #ifndef A_

    #define A_

    namespace yi

    {

    sum(int a,int b);

    }

    #endif

    那么就可以在一个文件中使用这两个函数了,前者是jia::sum,后者是yi::sum,当然了,使用之前别忘了包含两个头文件。



    展开全文
  • 目的本文目的主要是说明 命名空间的 use 关键词 new ClassName 这两个步骤,哪个步骤才会执行自动加载,这是逻辑有点混乱表现,这种想法也是很正常,让我们来解密吧命名空间(namespace)php从5.3加入了...
    展开全文
  • C#初始类和命名空间

    2020-05-17 08:20:09
    本节内容: 1、剖析Hello,World程序 1.1初始(class)与名称空间(namespace) 2、类库引用 2.1DLL引用(黑盒引用) ...命名空间可以有效避免同名的类有冲突。 C#是完全面向对象语言,整个程序都包含在一...
        

    本节内容:

    1、剖析Hello,World程序

    1.1初始类(class)与名称空间(namespace)

    2、类库的引用

    2.1DLL的引用(黑盒引用)

    2.2项目引用(白盒引用)

    2.3建立自己的类库项目

    3、依赖关系

    4、排除错误

     

    1、剖析Hello,World程序

    1.1、类(class)构成程序的主体

    1.2、名称空间(namespace)以树型结构组织类(和其他类型)

    例如ButtonPath

    命名空间可以有效的避免同名的类有冲突。

    C#是完全面向对象的语言,整个程序都包含在一个类里面:class Program{}

    当有引入命名空间:Using....相当于告诉程序如果我要写一个类的时候,如果我没有把这个类的命名空间在类名前标出来,就去我引用的命名空间里面检索一遍,看哪个命名空间里面有这个类,就用这个命名空间里面的类就可以了。

    比如:Console类有两种引用方式:

    第一种:不引入命名空间:System.Console.WriteLine();

    如果还要用System里面的类每一次都要向上面一样在类前加前缀(这叫权限命名),显得冗余。

    那可不可以我写Console编译器就知道它是从System里来的呢?

    第二种:引入命名空间:

    Using System

    Console.WriteLine();以后引用System命名空间里面的类就不用加前缀了,这就是引用命名空间的方便之处。

    *小技巧:找到某个类的命名空间。两种方法

    第一种:是通过文档来知道,打开导入的本地帮助文档,搜索该类。

    第二种:相对简单的方法:把鼠标放在这个类上面左下角会出现一个蓝色智能标记,有两个选项:Using SystemSystem.Console分别表示引用命名空间的两种方法。(编译器比较聪明猜到了这个类属于哪个命名空间)

    注意不能图方便把全部的命名空间都引用进来,会发生冲突。因为命名空间以树型结构来组织类的,

    不同的树型结构也有可能有相同的类存在,这时若使用引入命名空间的方法来引用相关类就容易造成混乱;比如

    Path类既属于System.IO命名空间也属于System命名空间,则这时就不知道引用哪个命名空间里面的Path类了。

    这时应该采用第一种不引入命名空间的方法才能准确的引用不同命名空间相同名字的类。

    如:System.Path或者System.IO.Path就可以清楚地区分不同命名空间里面名字相同的类了。

    *再比如Button类有十多种,这时就凸显出了命名空间的重要性,如果没有命名空间就只能有一个Button类了,有效的解决类名的冲突。

    *这样也给我们一个设计思路,当我们在设计类的时候要给类一个精确地名字同时要非常精确的把它放在它应该在的命名空间里面,这样既方便自己写程序,也方便别人用我们程序的时候也能快速和舒服的找到我们的类。比如:自己创建了一个.h文件,在别处引用时不仅要引入头文件.h还要引入这个自定义类的命名空间,让他独一无二。

     

    2、类库的使用

    就好比书,虽然知道这本书是哪个图书馆的,如果连图书馆都没有用可能把书拿出来吗?

    所以有:类和命名空间是放在叫做类库的地方,类库就是类和名称空间的物理基础

    (不同的技术类型的项目会默认引用不同的类库)

    2.1DLL(类库)Dynamic link library)动态链接库,的引用(黑盒引用,无源代码)*NuGet简介.

    如果要使用相应的命名空间和类就要先引用相应的类库。在那里找类库呢?解决方案->引用,里面的都是你新建里不同类型程序程序默认引用的类库,双击其中一个类库,会弹出”对象浏览器”窗口,其中一层层列出了类库->各类库所包含的名称空间->相关名称空间包含的类。

    *强调一点:不同的项目模板本质上建了项目之后相应地引用了不同技术(比如winformWPF)所需要的类库。

    如果我们除了模板引用的类库之外还想要引用其他类库怎么办呢?日常工作中对类库的引用就两种方式:

    第一种:是对编译好的DLL直接引用,这种引用我们叫黑盒引用,因为我们没有DLL的源代码;

    第二种:我们有类库的源代码,然后我们对源代码进行引用,源代码是放在项目里面,这叫做项目引用,或者叫白盒引用,能够看到源代码的。

    两种引用各有特点。需要注意的是当把DLL拿来之后一定要配一个说明文档,不然用处不大,因为黑盒引用不知道源代码就不清楚该DLL有什么名称空间和类就无法使用。在那里添加类库?在解决方案->引用->右键->添加引用->右下角”浏览”添加本地DLL,这样就把下载来的类库引用程序了,然后就可以对着说明文档使用类库。(同样可以使用上述方法查看这个类库有多少个命名空间和相关的类)

    *黑盒引用存在的问题,若代码存在错误,无法修改,还能告诉制作类库的人让他改了,再编译出DLL再发给我才行。另一方面,我的程序对这个引入的类库有了依赖性,即它的类库有问题我的程序也会有问题,这就是依赖,而在类的级别也会有依赖性,即我的类:如C#程序体都包含在 class Program中,调用了该类库的类,这两个类之间也有依赖关系,连为一体,一方出错,双方都错。*写程序时一定要小心这个依赖关系。这个依赖关系大概有5,6种有的依赖关系很强,有的依赖关系很弱,我们尽量使用比较弱的依赖关系,这样的话,我的程序就不至于出现某个底层的类出现问题我的上层所有的程序都不能工作。

    解决办法之一,弱的依赖关系:比如可以暂时先用一个相似的类替换该出错的DLL,再继续修成程序,等该DLL修改好再继续使用该类库。怎么安排?这是比较高级的内容。

    可以发现DLL的文档就是MSDN文档的缩影:MSDN里面有非常庞大的类库的文档,在里面可以查找每一个类的信息,包括方法、属性、事件等。

    想法:本来控制台程序是不能显示窗口的,但是如果引入相关类,就变得可以显示窗口了。解决方案->引用->右键添加引用->程序集选项卡里搜索System.Windows.Forms,添加该类库,则该类库就是我们程序的一部分了,可以自由引用,引用DLL类前,如上面所说的要先,写命名空间,方式发生冲突:Using System.Windows.Forms;再引用Form类就没问题了。

    使用新潮技术(NuGet)来解决比较复杂的依赖关系问题,程序和类库有一定的依赖,底层的库是引用不了上层的库。因为上层的类库需要许多底层的类库支持才能运行,但凡缺少一个底层的类库没有引用进来,上层的类库都不能使用。引用的时候硬盘里面再有重名的类库或者版本不同的这样引用起来很可能在程序中引入一些非常难以排除的错误。因为这时候你只有DLL,没有源代码,几乎可以说是“蒙着眼睛引用类库”这是很危险的!特别是对于大型的项目。

    解决方法:以一个类库包的形式放在网上,客户要用我敲一个命令一组类库都包含到项目里面去了,不用手动的添加引用类库,这样就非常安全,高效,这就是NuGet技术:解决方案->引用->管理NuGet程序包,在这里面搜索相关类库集合而成的包,安装它,就会在我们项目的引用里自动添加相关的类库,而且新添加的类库都是由NuGet管理不用担心,版本啊,缺少某个类库之类的问题了,十分方便。*总结:用NuGet去引用网上一些非常好的类库。

    2.2、项目引用(白盒引用,有源代码)

    自己写类的时候有命名空间是为了让别人引用更加方便。一个项目隶属了多个solution(解决方案)这就项目的重用,当我们拥有别人类库的源代码,可以在解决方案右击->添加->已有项,这样就可以把别人的项目文件添加到我们的程序里了,此时在右击引用->添加,在解决方案选项卡就可以看到我们添加的别人项目里的类库了,选择添加即可开始引用该项目的类库。可见同一个解决方案下的不同项目要通过上面的方法才可以使用彼此的类库。

    Debug修的,排错的找的是Root cause!不要在补丁上打补丁,不在问题根源修复只会越弄越差。

    这就是白盒引用。

    2.3、建立自己的类库项目

    右击解决方案->添加->新建项目->选择类库(class library)项目,class library它不是可执行的文件,它编译出来的结果就是DLL(类库),在生成的CS文件里面进行类库相关类与方法的编写。在创建的类库项目上右击->生成就会在该项目本地源码文件夹bin->debug文件夹里面生成DLL(类库文件)这样附上使用说明就可以传播出去了。

     

    3、依赖关系

    类和类之间是有依赖关系的,类库和类库之间也是由依赖关系的,那么如果底层的类或者类库有问题,那么上层的类或者类库工作也会不正常,所以依赖关系(也叫耦合关系)是非常重要的。

    3.1、类(或对象)之间的耦合关系

    3.2、优秀的程序追求”高内聚,低耦合”(教学程序往往会违背这个原则)

    高内聚:指一些数据一些功能该属于哪些类就放到哪些类里面去,要精确的放在这些类里面去,这就叫高内聚;

    低耦合:类与类之间的关系尽可能的低,尽可能的松,就叫低耦合。

    类库的设计也是这个原则,一些类该放到哪些类库里面就放到哪些类库里面,不要乱放,类库与类库之间的关系也尽量是低耦合的,低依赖的。这样程序结构才会非常清晰。

    3.3UML(通用建模语言)类图:

    展现类与类之间的关系。

     

    4、排除错误

    4.1、仔细阅读编译器的报错。

    4.2MSDN文档与搜索引擎结合。

    当你看到一大片错误的时候不见得真的有这么多错误,有的时候就是一个很小的错误就造成这么多错误,比如:中文的标点符号。(实际上编译器是有一定智能的如果语句正确,会高亮显示);真正难排除的错误是编译器认为是对的,但是运行会出错这就是逻辑错误,需要一步步debug来解决。

     

    展开全文
  • 一、类的命名空间 定义:我们在创建一个类的时候就会创建一个类的命名空间,用来存储类中定义的所有的名字,这些名字称为类的属性 类的属性有两种形式:静态属性动态属性 静态属性就是在类中定义的变量 动态...
  • JVM深入学习(三)类加载深入解析和命名空间类的卸载类加载深入剖析命名空间类加载器的命名空间关系类加载器命名空间分析 类的卸载 由用户自定义的类加载器所加载的类是可以被卸载的。 System.gc(); 强制调用gc做...
  • 1 命名空间 命名空间是用来存放名字与对象绑定关系的。比如a=1,Python会申请内存空间存放对象1,然后将x与1绑定关系...全局命名空间(global):模块中定义变量,函数, 局部命名空间(local):函数中定义变量
  • Python中变量作用域的问题NameSpace(命名空间)有着很大的关系命名空间是从名字到对象的一个映射。它其实就是一个dict。具体来说,就是Python为模块,,对象,函数保存一个__dict__里边就是从名称到对象的映射...
  • 命名空间(Namespace)是从名称到对象映射2、实现:大部分的命名空间都是通过 Python 字典来实现3、目的:命名空间提供了在项目中避免名字冲突一种方法4、各个命名空间是独立,没有任何关系的,所以一个命名...
  • 命名空间和程序集

    2019-10-08 05:55:25
    命名空间是对类的一种逻辑划分,是...命名空间和程序集的关系 命名空间和程序集是多对多的关系 只有项目引用程序集之后,才能有可供引用的命名空间。 转载于:https://www.cnblogs.com/sunxi/archive/2013/03/10/2...
  • 一、类的命名空间  定义:我们在创建一个类的时候就会创建一个类的命名空间,用来存储类中定义的所有的名字,这些名字称为类的属性  类的属性有两种形式:静态属性动态属性  静态属性就是在类中定义的变量 ...
  • 命名空间和程序集不一定相关 1. 同一个命名空间中各个类型可能是在不同程序集中实现。(System.IO.FileStream在MSCorLib.dll程序集中,而System.IO.FileSystemWatcher在System.dll程序集中) 2. 同一个程序...
  • 一、函数的命名空间 命名空间:name space是从名称(name)到对象(object)上的映射。 当一个name映射到一个object上时,这个...这就是与实例的关系。 不同的命名空间在不同的时刻被创建,并且有不同的生命周...
  • 在给学员讲解命名空间,程序集和类的关系的时候,发现普遍接受困难,于是想写一个这样的专题文章,今天终于有时间搞定. 讨论程序集、名称空间、类3者间的关系 程序集:可以理解为你看到的exe文件和dll文件,每个...
  • 各个命名空间是独立没有关系的,一个命名空间中不能有重名,但是不同的命名空间可以重名而没有任何影响。 分类: 1、全局命名空间: 在代码一运行时就创建的命名空间。 2、局部命名空间: 指在程序运行过程中...
  • 命名空间的分类 1、内置的命名空间:python解释器中的,如print(),input()等 2、全局命名空间:是在程序从上到下被执行过程中...各个命名空间中之间的关系 1、在局部,可以使用全局、内置命名空间中的名字 2、在全...
  • 命名空间

    2020-11-23 17:20:15
    命名空间和作用域 命名空间是从名称到对象映射, 命名空间提供了在项目中避免名字冲突方法,各个命名空间是独立,没有任何关系的。一个命名空间中不能有重名,但不同命名空间可以重名是没有影响。 ...
  • 十二、命名空间跟模块介绍 模块在其自身作用域里执行,而不是在全局作用域里,意味着定义在一个模块里变量,函数,等只有引入模块以后才能使用 导出声明:任何声明都能通过添加export关键字来导出(如:变量,...
  • 原标题:Python 中命名空间与作用域介绍来源:南枝向暖北枝寒MA【导语】:对命名空间和作用域认识很模糊?不清楚?为了让大家有清晰认识,本文详细介绍了命名空间类型及作用域,希望能让你对python有更深刻认识...
  •  Python中变量作用域的问题NameSpace(命名空间)有着很大的关系。  命名空间是从名字到对象的一个映射。它其实就是一个dict。具体来说,就是Python为模块,,对象,函数保存一个__dict__里边就是从名称到对象...
  • 如self.name self.age等1.2对象和类之间存在一个关联关系 所以对象能够找到类 但是 类不能找到对象1.3使用类名.属性 只会寻找类中静态变量名字 使用对象.属性 会现在对象自己的命名空间中找名字。如果找不到 再到...
  • name space是从名称(name)到对象(object)上的映射(map)。 当一个name映射到一个object上时,我们说这个name与这个object有绑定(bind)关系,或说这个name指向这个object...因为类的定义借用了命名空间,所以要深入
  • 对象(object)一切皆对象。在Python中,包括数据处理数据函数,...Python对象层次结构Python通过创建对象对象间相互作用来完成特性任务。因此,我们需要在程序中访问对象并通过指令操控对象间相互作用...
  • 为了将类组织起来成为组,从而对类进行管理,java .net分别引入了... 但是这两个概率又有不同: 1.Java 语言要求包声明的层次实际保存类的字节码文件的目录结构存在对应关系,以便将来使用该类时能通过包名(也就
  • 类的里面可以直接定义字段(成员变量),也可以定义方法(函数)。 例如: 这里的public是修饰符,修饰符的作用是用来限定它的可访问范围。 两个同范围(同一个类中,或者父子类中)两个同名但参数类型不同...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 684
精华内容 273
关键字:

命名空间和类的关系