[Clr via C#读书笔记]Cp5基元类型引用类型值类型
Cp5基元类型引用类型值类型
基元类型
编译器直接支持的类型,基元类型直接映射到FCL中存在的类型。
作者希望使用FCL类型名称而避免使用关键字。他的理由是为了更加的清晰的知道自己写的类型是哪种。但是实际当中关键字更常用,FCL类型的写法太繁琐了。特别是你不用过多考虑和其他语言交互的时候,只使用C#的时候。所以这一点上我还是不同意作者的看法。
类型的隐式转换和显示转换过程中的可能存在的问题。checked,unchecked;来检查溢出;
CLR并不认为Decimal是基元类型,所以执行速度要慢很多。
引用类型和值类型
引用类型在托管堆上创建,new后返回其在托管堆上的地址,受GC控制,引用变量还是在栈上,用来存储引用,没有的时候存的就是null。
而值类型则在线程栈上创建,其保存的就是值本身而不是地址,不受GC控制。结构,枚举,派生自System.ValueType,全都是Sealed。
Struct使用new的目的和引用类型不同,是为了初始化内部成员,如果不使用new来初始化内部成员,也可以使用对象.成员的方式一个一个设置,就是比较麻烦。可以给Struct设置一个带参数的构造函数,这个构造函数的目的也是为了初始化内部成员,不是为了创建结构。
可空类型nullable
值复制会复制值本身,引用复制只会复制引用;
装箱和拆箱
装箱和拆箱的含义这一块很好理解。 装箱拆箱影响性能,所以尽量避免。要会分析给定代码的装箱拆箱次数。大多数方法进行重载的唯一目的是为了减少装箱拆卸操作。
- 对没有装箱的值类型(主要是说Struct),直接调用虚方法。
- 重写的虚方法调用方法在基类中的实现,那么该值类型会被装箱,以便通过this指针引用对一个堆对象的引用传递给基方法。
- 调用非虚的继承自Object的的方法需要装箱,因为需要的this指向的是堆上的实例的引用 。
- 将值类型未装箱的实例传递给接口的时候,会装箱,因为接口对应的是引用。
书上这里写的也比较绕口,具体参考P122的例子,例子和例子的解释都非常的清楚。
C#不允许更改已装箱的值。
相等性和同一性
Equals方法=同一性identity;重写Equals;静态方法ReferenceEquals;
接口System.IComparable,System.IComparable,CompareTo方法
对象HashCode
两个对象相等,必须要有相同的hashcode.
dynamic基元类型
本质就是Object。
动态化显著简化了COM对象互操作。
C#的动态支持会产生大量开销,所以使用的时候要考虑清楚。
[Clr via C#读书笔记]Cp5基元类型引用类型值类型的更多相关文章
- CLR via C#深解笔记三 - 基元类型、引用类型和值类型 | 类型和成员基础 | 常量和字段
编程语言的基元类型 某些数据类型如此常用,以至于许多编译器允许代码以简化的语法来操纵它们. System.Int32 a = new System.Int32(); // a = 0 a = 1 ...
- CLR via c#读书笔记五:方法
注:书本第8章:方法 实例构造器和类(引用类型) 构造器方法在“方法定义元数据表”中始终叫做.ctor(constructor的简称). 构造引用类型的对象,在调用类型的实例构造器之前,为对象分配的内 ...
- CLR via C#(02)-基元类型、引用类型、值类型
http://www.cnblogs.com/qq0827/p/3281150.html 一. 基元类型 编译器能够直接支持的数据类型叫做基元类型.例如int, string等.基元类型和.NET框架 ...
- C#中的基元类型、值类型和引用类型
C# 中的基元类型.值类型和引用类型 1. 基元类型(Primitive Type) 编译器直接支持的类型称为基元类型.基元类型可以直接映射到 FCL 中存在的类型.例如,int a = 10 中的 ...
- CLR via #C读书笔记三:基元类型、引用类型和值类型
1.一些开发人员说应用程序在32位操作系统上运行,int代表32位整数:在64位操作系统上运行,int代表64位整数.这个说法是完全错误的.C#的int始终映射到System.Int32,所以不管在什 ...
- Clr Via C#读书笔记----基元线程同步构造
线程文章:http://www.cnblogs.com/edisonchou/p/4848131.html 重点在于多个线程同时访问,保持线程的同步. 线程同步的问题: 1,线程同步比较繁琐,而且容易 ...
- 读经典——《CLR via C#》(Jeffrey Richter著) 笔记_基元类型(二)
[基元类型推荐] 推荐直接使用 FCL 类型. [理由] 编码时不至于困惑string与String的使用.由于C#的stirng(一个关键字)直接映射到System.String(一个 FCL 类型 ...
- 读经典——《CLR via C#》(Jeffrey Richter著) 笔记_基元类型(一)
[概念] 编译器直接支持的数据类型 [C#基元类型与对应的 FCL 类型] C#基元类型 FCL 类型 说明 sbyte System.Sbyte 有符号8位值 byte System.Byte 无符 ...
- 读经典——《CLR via C#》(Jeffrey Richter著) 笔记_基元类型(三)
[checked 和 unchecked 基元类型操作] 1.第一种使用方式 UInt32 invalid = )); //OK,不会抛异常 Byte b = ; b = ));//抛出Overflo ...
随机推荐
- Java之环境变量配置
1.首先安装Java的JDK(Java开发工具包 包含JRE(Java运行环境))下载地址URL:www.oracle.com (64位或32位) 安装:傻瓜式安装(点击下一步即可)中间可更改安装目录 ...
- 洛谷P4525 【模板】自适应辛普森法1(simpson积分)
题目描述 计算积分 结果保留至小数点后6位. 数据保证计算过程中分母不为0且积分能够收敛. 输入输出格式 输入格式: 一行,包含6个实数a,b,c,d,L,R 输出格式: 一行,积分值,保留至小数点后 ...
- vue分页组件重置到首页问题
分页组件,可以借用这个老哥的@暴脾气大大https://www.cnblogs.com/sebastian-tyd/p/7853188.html#4163272 但是有一个问题就是下面评论中@ Mrz ...
- 部署laravel项目
1 先登录到服务器上,将代码克隆下来 git clone 项目地址 2 避免composer太慢,启用本镜像服务 可以先安装 apt-get install zip,unzip,php7.0-zip ...
- kafka初步学习
消息系统 什么是消息系统? 消息系统负责将数据从一个应用程序传输到另一个应用程序,因此应用程序可以专注于数据,但不担心如何共享它.分布式消息传递给予可靠消息队列的概念.消息在客户端应用程序和消息传递系 ...
- 001-快速排序(C++实现)
快速排序的基本实现 快速排序算法是一种基于交换的高效的排序算法,它采用了分治法的思想: 1.从数列中取出一个数作为基准数(枢轴,pivot). 2.将数组进行划分(partition),将比基准数大的 ...
- 【8086汇编-Day5】第三次实验
练习一 结果展示: 这个程序执行下来貌似打印了数字36,但其实是两个数字3.6: 这段就是用来打印3:首先ah里放2,跟后面的int 21h结合起来就是调用21号中断例程的2号子程序,用来打印到标准输 ...
- Mybatis之关联查询及动态SQL
前言 实际开发项目中,很少是针对单表操作,基本都会联查多表进行操作,尤其是出一些报表的内容.此时,就可以使用Mybatis的关联查询还有动态SQL.前几篇文章已经介绍过了怎么调用及相关内容,因此这里只 ...
- [python]安装wxpython的时候遇到问题记录
一.安装wxpython的时候报错 “no installation of python 2.7 found in registy” 解决方案: win7上,已经安装python27,但是在安装wxp ...
- springBoot Swagger2 接口文档生成
// 生成配置类 package com.irm.jd.config.swagger; import org.springframework.context.annotation.Bean; impo ...