首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

6-方法

1.实例构造器[.ctor] 默认情况下,对于引用类型,如果我们没有显示的定义实例构造器,则C#编译器会为我们定义一个无参的公有实例构造器。...一个类的实例构造器在访问基类的继承字段之前,必须调用基类的实例构造器,C#编译器会自动产生对基类默认构造器的调用代码。...C#值类型不允许定义无参的构造器,CLR允许这么做 2.类型构造器[.cctor] 类型构造器又称静态构造器。C#只允许一个静态构造器,不允许有访问修饰符[默认private]不能有参数。...这是因为CLR支持一个类型定义多个只有返回值类型不同的方法,然而很少有语言可以提供如此的能力,C#就不支持这样做。 转换学习模 版[System.Decimal类]。 5.引用参数 默认情况下。...这两个关键字告诉编译器产生额外的元数据来表示指定的参数是按 引用的方式传递的[参数的地址,而不是参数本身的值]。 从IL或者CLR的角度,out和ref实际是一样的。

66750

我看过的C#书籍

《Visual C# 2012 大学教程》(第五版) 这本书是我在图书馆里借到的,和我以前借过的《Java程序员教程》是一个公司出版的,所以看起来有一种浓浓的既视感。...我感觉,看完这本书,基本对C#的应用也就有了清晰的认识了。 这本书我目前还在看,内容很丰富,看的时候真是受益匪浅。 《CLR via C#》 (第四版) 这本书是我看过的最难的C#书了。...与一般的站在C#语言视角的书籍不同,这本书是站在CLR和编译器的角度来说明的。...就像我,因为这本书浪费了不少时间,但是消化吸收的东西并不多。当然,如果已经有了一定的水平,看看这本书还是非常有帮助的。 《编写高质量代码:改善C#程序的157个建议》 这也算是一本不可多得的好书。...如果你对以下问题还有一些疑惑,那么就可以看这本书了,这本书对这些问题做了充分的解释: 如何使用字符串更高效 CLR各类型间如何转换更高效 使用单例模式还是静态类 一个文件包含一个类比较好,还是包含多个类比较好

99810
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    CLR、程序集、反射和控制反转

    CLR:   CLR(Common Language Runtime,简称CLR)通用语言运行时,它是.net框架的核心,意思就是可被各种不同语言所使用的运行时。...vs的ide中有托管扩展C++,C#,VB等等,说明vs中集成了各种面向CLR的语言编译器。当我们用不同的语言编写代码时,编译器就会对应将我们的代码编译成面向CLR的代码。...有什么好处呢,比如在数学和金融领域的应用中,在表达相同意图的情况下,Python将会比C#节省好几天时间。还有一些模块如果对性能有要求,C++编写的代码肯定会比C#快。...程序集:    说程序集之前,先来了解一下什么是托管模块,通过前边介绍,我们可以通过任何支持CLR的编程语言来创建源代码文件,然后通过相应的编译器做代码检查和源代码分析,但是不管使用了何种的编译器,最后生成的结果都是一个托管模块...写的挺好。后续有时间争取写一些反射和控制反转的实例代码,方便大家学习!!! 总结一下:        将不同的知识点串联起来学习,真的是一个很好的方式,鼓励大家多多学习,多多总结,早日成为大牛!!!

    66510

    简单介绍.NET

    刚接触C#或者.NET的小伙伴会对一对专业词汇根本不理解或者不清楚这些东西的作用和关系,例如:.NET Native , C# , .NET , CLR , JIT , IL , AOT等等词汇完全蒙圈的状态这里简单的介绍一下...下面详细说明一下CLR的主要功能和概念: 一个.NET CLR结构的图片通常会包括以下部分: 最上层是各种**.NET应用程序**,它们是由各种.NET语言(如C#、VB.NET、F#等)编写的。...在CLR之下,可能会有几个子组件,例如: JIT编译器:负责将中间语言(CIL)转换成特定平台上的机器语言。 垃圾收集器:负责自动管理内存,回收不再使用的对象。...在.NET环境中,所有的.NET代码(无论它是由C#、VB.NET还是其他.NET支持的语言编写的)在编译时,都首先被转换为IL。...语言互通性:由于所有.NET语言都编译到统一的IL,因此不同语言编写的代码可以轻松地进行交互。 优化:在运行时,CLR的JIT编译器可以根据目标计算机的具体硬件进行优化,以提高应用程序的性能。

    28930

    .NET简谈平台大局观

    的开人员;尽管在学校的学生学过编译原理、操作系统等等计算机原理方面的理论知识;但是就是无法将这股力量用到实实在在的理解上;下面本人就简谈一下.NET中的主要核心东西:高级语言(C#,VB.NET,J#等...)、编译器、CLR引擎、VisualStudio系列工具等等之间是如何协调工作的,这样的理解有利于我们自己在开发软件项目的时候可以借鉴一下好的思想(如:文档对象模型、脚本引擎等等),好的实现方式,这里不存在具体的设计模式...,这篇文章所讲的类容以具体的模块划分如何协调工作为主,针对初学者而言; .NetFramwork是一个技术框架的统称,在这个框架里面是一系列为了实现软件开发而具有的所有支撑; 1: 这个图很简单没有给出复杂的部件....NET平台开发软件了;各个语言是有不同厂商开发的,所以必须提供语言的编译器,通过编译器将高级代码编译成标准的微软中间代码,CLR只认识中间代码(更确切的说应该是JIT认识);CLR加载中间代码并且调用及时编译器将其编译成本地代码...,这样才能做到跨平台的作用;每个电脑的配置上不同的,CPU结构、内存结构等等都不一样,所以用IL语言传递,最终运行的时候再编译成本地代码;在具体的东西已经超出本章的范围; 整个的实现过程大致是这样的,我们来介绍

    18730

    C# checked和unchecked详解

    所以b和200(这两个值都不超过32位),首先转换成32位(假设当前操作系统是32位),然后加到一起。结果就是一个32位值(十进制300或者十六进制12C)。...如果将值强行转换为Byte,那么还会出现一个问题,就是值溢出的问题,Byte只能表示0~255范围的值,所以300超出了Byte的范围,值就溢出了.不同的语言以不同的方式处理溢出,C和C++不视溢出为错误...而CLR提供了一些特殊的IL指令,允许编译器选择它认为最正确的行为。CLR有一个add指令,将作用是将两个值加到一起,但不执行溢出检查。...也就是说C#允许程序员自己决定如何处理溢出,溢出检查默认是关闭的。...下面是/checked编译器开关的打开方式: ? 第二种:就是用checked和unchecked关键字来控制溢出的检查与否,这体现的C#溢出检查的灵活性.

    99280

    C#学习笔记一: .Net Framwork

    前言:  一次偶然的机会  在园子里看到@Learning hard 出版的一本书: C#学习笔记>>, 然后买来 一直到现在读完, 感觉很不错, 适合入门, 书中内容是从C#1.0 到5.0....下面就来分享一下这本书中自己感觉需要记录的一些东西. ...我们可以将CLR看成一个在执行时管理代码的代理, 它提供了内存管理, 线程管理和异常处理的服务, 而且还负责对代码实施严格的类型安全检查, 保证了代码的正确性....类库就是一组DLL程序集的集合. 1.4 C# 代码的执行过程   >C#代码编译为中间语言代码的阶段     在编译C#代码时, C#的编译器(VS中集成了C#编译器)把代码译为通用中间语言(Common...●并不是只有C#代码才能够被编译为中间语言代码, 其他面向.Net的语言在执行之前也都需要先编译为中间语言代码. 该过程由编译器来完成.

    65480

    .Net 框架

    笔者不会像字典一样按首字母排序对术语进行逐一解释,因为这样还是难以理解。我们还是从大家最熟悉的东西开始吧! 引子 设想一下:编写下面这样一个最简单的显示“Hello, World!”...方法体的CIL语言描述(C#) 至此,可以得到一个初步的推断:不管是VB.NET还是是C#,编译之后的程序集都能够用IL DASM打开,因此它们生成的程序集的格式都是相同的;当程序所实现的功能相同时,程序集所包含的...因为不论是C#语言也好,VB.NET语言也好,C++/CLI语言也好,甚至是重新开发的一套以自己的名字缩写命名的语言,只要它期望运行的目标平台是.NET,在经过相应的编译器编译之后,所生成的程序集就是由...从上面的例子也可以看出,C#和VB.NET的很多语言能力并不是自己的,而是从CIL“借”过来的这样做也保证了在不同语言中相应类型的行为是一致的。...这里又存在一个“鸡生蛋问题”:根据不同的程序集信息会加载不同版本的CLR,因此加载CLR的组件就应该只有一个,不能再根据CLR的版本去决定加载CLR的组件的版本。

    1.9K21

    .NET面试题系列 - C# 基础知识(1)

    通常这也是各种招聘工作的第一个要求,即“熟悉C#”的一部分。连这部分都不清楚的人,可以说根本不知道自己每天都在干什么。我们天天使用C#写程序,但如果连C#基础的东西都不懂,怎么证明你“熟悉C#”呢?...但是如果你不能答出什么是装箱,你会引发面试官以下的猜想: 这人连最基础的东西都不知道,还写了熟悉C#,他还写了熟悉XX,熟悉YY,看来他对那些东西可能也就了解皮毛。...如果你写了一个不遵循CTS的语言(以及一个编译器),那么你的语言不能被看成是.NET平台的语言,编译出来的中间代码(如果有的话)不是IL。CTS和IL是所有.NET语言的爸爸。...当CLR扫描完M3方法之后,发现有两个引用类型Employee和Manager,故计算这两个类型及其所有基类型中定义的所有实例字段需要的字节数,在堆上建立两个类型对象,它们的构造相同:类型对象指针(TypeHandle...(这称为浅复制,与之对应的深复制则是要逐一复制对象所有成员的值,C#没有深复制的方法,要自己实现)值类型则完全不同,复制值类型将进行逐字段的复制,而没有指针参与。所以值类型是相互独立的。

    1.9K20

    三、公共语言运行时(CLR)简介

    二、源代码=>程序集及程序集概念介绍中介绍了源代码通过C#编译器生成程序集(或者可执行应用程序exe)的整个过程,本文主要介绍公共语言运行时与程序集的关系. 1、 通过C#编译器编译之后生成的每个程序集既可以是可执行程序...可以去任务管理器中校验结果. 3、windows32位版本和64位版本对编译器生成的托管模块的影响以及对CLR运行时的影响 (1)、问题  众所周知,windows包含32位和64位两个版本,所以相同的程序集代码在这两个环境下的会有差异...(只要安装了.Net Framework,且代码的类型安全,那么编译器生成EXE/DLL能同时在32位和64位下的windows中运行)  不同点:如果你的项目中包含了类型不安全的代码,比如面向特定CPU...架构的非托管代码进行相互操作,这个时候常规的做法可能无法满足这个要求. (2)、解决方案   -使用/platform命令行开关 为了帮助那些在程序集代码中需要操作不安全代码的开发人员,C#编译器提供了一个...(4)、项目指定目标平台后,编译器的工作方式 项目指定目标平台后,C#编译器生成的程序集会按照目标平台的配置生成相应的PE头、要么是PE32头,要么是PE32+头,除此之外,还会在头中指定要求什么CPU

    1.6K60

    .NET面试题系列 - .NET框架基础知识(1)

    这个程序集中也有一个System命名空间,它的内容和mscorlib.dll中的不同。可以看到,System这个命名空间存在于不止一个程序集中。这意味着不同的程序集可以共享一个命名空间。...NET的平台无关性主要体现为:.NET程序集可以在任何的平台上运行,不管是Windows,还是Mac,只要这个平台拥有将IL转换为机器码,以及加载其他相关程序集的能力(即CLR),而任何机器都可以运行机器码...它位于C:\%SystemRoot%\Microsoft.NET\Framework\版本号下,视安装的机器不同有两个版本,一个是工作站版本的mscorwks.dll,一个是服务器版本的mscorsvr.dll...因此,IL,MSIL和CIL指的是同一种东西。 当使用支持.NET的编译器编译之后,生成.dll或.exe文件。这文件称作.NET程序集,包含IL和元数据。...不同语言(例如C#和VB)经过不同编译器(例如C#编译器和VB编译器),编译一段功能相似的代码(区别仅仅在于语法),其IL也基本相似。虽然IL相对C#较为底层,但它仍然是一个十分高级的语言。

    1.7K10

    关于.NET参数传递方式的思考

    ,吃我想吃的东西。)。...在C#中使用out和ref来实现传递引用的方式传值,这两个关键字告诉编译器生成元数据来指明该参数是传引用的,编译器将生成代码来传递参数的地址,而不是传递参数本身。...例如和,在CLR中支持泛型类型的可变性,C#在4.0时获得了生命泛型遍体所必须的语法,并且现在编译器也能够知道接口和委托可能的转换。...可选参数的使用中,如果调用时省略了一个参数,C#编译器会自动嵌入参数的默认值。向方法传递实参时,编译器按从左向右的顺序对实参进行求值。...在写C#代码与COM对象模型进行互操作时,C#的可选参数和命名参数功能是最好用的,调用一个COM组件时,为了以传引用的方式传递一个实参,C#还允许省略REF/OUT,在嗲用COM组件时,C#要求必须向实参应用

    2K90

    X--名称空间详解

    在解析和编译XAML的过程中,我们经常要告诉编译器一些重要的信息,如XAML编译的结果应该和哪个C#代码编译的结果合并、使用XAML声明的元素是public还是private访问级别等等。...下面我们讲讲它们的具体用法: 4.2      X名称空间中的Attribute 前面我们已经讲过,Attribute和Property是两个层面上的东西,Attribute是语言层面上的东西,是给编译器看的...,Property是面向对象层面上的东西,是给编程逻辑看。...X:ClassModiffier的值随后台代码编译语言的不同而有所不同。 4.2.3    X:Name 我们之前已经提过XAML是一种声明式语言,但你是否想过XAML标签声明的是什么呢?...那么每当我们检索到一个对象,我们得到的究竟是同一个对象呢,还是这个对像的一个副本呢?这就要看我们为x:Shared赋什么值了。

    1.4K20

    十、元数据概述

    前面说过C#源文件经过C#编译器生成一个可执行的exe文件,该可执行的PE文件由以下几个部分组成: (1)、PE32(+)头   Windows要求的标准信息 (2)、CLR头  小信息块(CLR模块特有的...),这个头包含模块生成时所面向的CLR的major(主)和minor(次)版本号,一些标志,一个MethodDef token,该token制定了模块的入口方法(前提是该模块是CUI、GUI或Windows...Store执行体).CLR头还包含了元数据的大小和偏移量. (3)、元数据   (4)、IL 本文主要介绍元数据,元数据是由几个表组成的二进制数据块.一共有三种表,如下:定义表、引用表、清单表. 1、...以上是常用的定义元数据表和引用元数据表,当然常用的表不只是以上几种,还有其他的....注:编译器编译源代码时,代码定义的任何东西都将在元数据表中创建一个记录项 3、ILDasm.exe 通过该工具可以查看托管模块的元数据构成,有需要时可以使用该工具查看完整的元数据信息.

    59370

    OSX 上初步尝试 asp.net 5

    新的 C# 编译器 Roslyn。 一个新的跨平台的 CLR(对应 Java 平台的 JVM)。 新的项目组织与构建工具KVM。 基础库 corefx。...但是不同的是,使用了 Project.json 文件格式作为依赖声明,并且也会自动帮你管理循环依赖。这个简直就是直接把 npm 抄借鉴了一遍,格式都很像。...coreclr 一个新的精简版跨平台的 CLR,(据说继承自 silverlight?)...当然你也可以使用传统的 CLR 来作为运行时(现在称为 full .NET CLR)。 Roslyn 使用 C# 写的 C# 编译器,更加开放和组件化,主要是帮你编译你写的代码以及第三方依赖的代码。...corefx coreclr 只是一个 CLR,C# 中字符串等基本的功能还是使用 C# 编写的,还有很多其它的基础库,这部分代码就作为 corefx 存在了,并且绝大部分代码都是跨平台的。

    88270

    Python有哪些实现方式你知道吗?

    这种语言规范可以用不同的方式实现,可以用C实现,也可以用C++、Java、C#、JavaScript,甚至使用Python自己实现。...这篇文章就是简要介绍并比较不同的Python实现,并且今后还会不断的扩充。 CPython CPython是标准Python,也是其他Python编译器的参考实现。...所以当有人问道Python是解释执行还是编译执行,可以这样回答:Python(CPython)将Python源码编译成CPython字节码,再由虚拟机解释执行这些字节码。...IronPython IronPython与Jython类似,所不同的是IronPython在CLR上实现了Python,即面向.NET平台,由C#编写。...但其前景是非常值得看好的(如果没像Google的Unladen Swallow那样死掉的话。话说,Google的东西现在是越来越不敢用了,不是他们的东西不好,是怕用着用着,他们就关掉了)。

    1.2K20

    各种 Python 实现的简单介绍与比较

    这种语言规范可以用不同的方式实现,可以用C实现,也可以用C++、Java、C#、JavaScript,甚至使用Python自己实现。...这篇文章就是简要介绍并比较不同的Python实现,并且今后还会不断的扩充。 CPython CPython是标准Python,也是其他Python编译器的参考实现。...所以当有人问道Python是解释执行还是编译执行,可以这样回答:Python(CPython)将Python源码编译成CPython字节码,再由虚拟机解释执行这些字节码。...IronPython IronPython与Jython类似,所不同的是IronPython在CLR上实现了Python,即面向.NET平台,由C#编写。...但其前景是非常值得看好的(如果没像Google的Unladen Swallow那样死掉的话。话说,Google的东西现在是越来越不敢用了,不是他们的东西不好,是怕用着用着,他们就关掉了)。

    75800

    各种 Python 实现的简单介绍与比较

    这种语言规范可以用不同的方式实现,可以用C实现,也可以用C++、Java、C#、JavaScript,甚至使用Python自己实现。...这篇文章就是简要介绍并比较不同的Python实现,并且今后还会不断的扩充。 CPython CPython是标准Python,也是其他Python编译器的参考实现。...所以当有人问道Python是解释执行还是编译执行,可以这样回答:Python(CPython)将Python源码编译成CPython字节码,再由虚拟机解释执行这些字节码。...IronPython IronPython与Jython类似,所不同的是IronPython在CLR上实现了Python,即面向.NET平台,由C#编写。...但其前景是非常值得看好的(如果没像Google的Unladen Swallow那样死掉的话。话说,Google的东西现在是越来越不敢用了,不是他们的东西不好,是怕用着用着,他们就关掉了)。

    98850

    《CLR via C#》Part1之Chapter2 生成、打包、部署及管理应用程序及类型

    由于在面试外企的时候,每次都被最后的口语交流所挡,终于下定决心恶补English,每天晚上有2-2.5h在学习它,所以只给自己暂定了每天晚上学1h的CLR这本书,估计东西更新会稍有点慢,但是希望能坚持每天晚上都有最少...1h吧,这样,我觉得6个月左右也足够我搞清楚CLR via C#这本书了,至于精通,一点点来吧。...C#编译器生成的exe文件:首先它是一个标准的PE(可移植执行体,Portable Executable)。...interface)和图形化用户界面(Graphical user interface),由于上面我们指定了/t:exe开关,所以C#编译器生成的是一个CUI应用程序,如果指定/t:winexe开关,...则可让C#编译器生成一个GUI应用程序。

    54410

    C# 中的多态性

    一、多态的概念 首先解释下什么叫多态:同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性。换句话说,实际上就是同一个类型的实例调用"相同"的方法,产生的结果是不同的。...(); } 小提示:经常有童鞋问重载和重写的区别,而且网络上把这两个的区别作为 C# 做常考的面试题之一。...实际上这两个概念完全没有关系,仅仅都带有一个"重"字。他们没有在一起比较的意义,仅仅分辨它们不同的定义就好了。 3、虚方法:即为基类中定义的允许在派生类中重写的方法,使用virtual关键字定义。...(3)和上一条对比:重写方法中子类的变量调用子类重写的方法,父类的变量要看这个父类引用的是子类的实例还是本身的实例,如果引用的是父类的实例那么调用基类的方法,如果引用的是派生类的实例则调用派生类的方法。...上面描述的就是 JIT 编译器在遇到调用类型的非虚实例方法以及虚实例方法时的不同执行方式,也这是处理这两类方法的不同方式造成了表面上我们看到的面向对象的三个特征之一——多态性。

    67020
    领券