《.NET框架程序设计》第五章 基元类型、引用类型与值类型

Microsoft.NET 框架程序设计 —— 基元类型、引用类型与值类型 本文讨论.NET 框架开发人员经常遇到的各种数据类型。熟悉这些类型的不同行为对于一个开发人员来说至关重要。当我刚开始接触.NET框架时,就没有完全理解基元类型、引用类型和值类型之间的一些差别。这种模糊的认识甚至无意间导致了一些难以査找的bug以及性能问题。我希望通过本章的解释,能够帮助大家在提升代码效率的同时避免我曾遇到的一些麻烦。 阅读详情

一、基元类型(primitive type):编译器直接支持的数据类型。

引用类型(reference type):总是从托管堆上进行分配。内存的回收通过垃圾收集器。

值类型(value type):通常分配在线程的堆栈中(当然,也可以被嵌入到一个引用类型的对象中)。值类型实例不受垃圾收集器的控制。

 

二、尽量使用FCL类型名:在开发中,尽量使用FCL类型名,也就是System.String,System.Int32等等。而不要使用string,int等基元类型名。因为FCL类型名具体的可以看出类型的一些限制,如Int32就是表示32位的有符号数,比较直观;另外,一些基元类型和对应的FCL类型名称不相同,容易引起混淆,如基元类型float对应的FCL类型名是System.Single;最后,同一个基元类型,可能在不同的编程语言中对应不同的FCL类型,这就会带来了一系列的潜在的问题。

三、类型转换:可以使用System.Convert类型的静态方法在不同类型的对象之间进行转型。Convert类型中的静态方法ChangeType可以将一个类型转换为另外一个任意的类型,前提是被转换类型实现了Iconvertible接口,特别是其中的ToType方法。(是否可以利用这个技术来实现点什么新的功能??)

四、溢出的异常的控制:许多基元类型的算术运算都会导致结果溢出,缺省情况下,这种溢出是不会抛出异常的,可以使用/checked+命令行开关告诉编译器使用带溢出的IL指令来产生代码。(如何在开发环境中打开这个开关??)另一种方法是在代码中使用checked和unchecked操作符来开关一段代码的溢出检查。我个人觉得没有必要使用checked和unchecked操作符来做这种精细的控制,虽然直接打开编译器的溢出检测开发会降低一些应用程序的性能,但是这种影响可以不必考虑。

五、引用类型和值类型的区别:任何”类”都是引用类型,任何”结构”和”枚举”都是值类型。另外,所有的值类型都必须继承自System.ValueType类型。CLR不允许一个值类型被用作基类型。

六、值类型的装箱与拆箱:当需要尽量提高一段程序的执行性能时,可以对这段程序进行分析,尽量减少其中的装箱和拆箱的操作。而之所以很多方法都提供了重载的版本,目的之一就是减少一些常用值类型的装箱操作。

微软.NET FRAMEWORK 2.0 程序设计 *****************************第一章FRAMEWORK基础*******************************.NET Framework 是 Microsoft Windows 组件旨在支持下一代应用程序和服务的整数。 .NET 很多基础知识框架将开发人员曾在其他面向对象的开发环境中所熟悉 ; 但是,.NET Framework 还包括到甚至最有 阅读详情

相关推荐

Microsoft.NET 框架程序设计 —— 通用对象操作

对于那些没有显式重写Equals方法的类型,Obiect(或者重写了Eauals方法的最近的那个基类)(译注:-个类型的基类的“近”或“远”是针对此基类在该类型所有的基类构成的继承体系中的相对位置而言的,越靠近 Object 的类型的位置越远,反之则越近)提供的实现将被继承。如果我们定义了自己的类型,并且希望比较它们中的字段是否相等,Object类型提供的默认实现对我们来说是不够的,我们必须重写Equals方法,提供自己的实现。前面的代码展示了根据字段类型的不同,所进行的两种不同的比较方式。

夜飞鼠的专栏 1012

什么是primitive主数据类型呢

primitive就是int,double,boolean这些数据类型,它们不是对象,只是内存里的几个字节空间而已。注意int是primitive,而Integer不是!Integer是一个类。java调用方法的时候参数是"pass by value"的,如果你有一个方法int myMethod(int i),调用者手里的i是10,调用myMethod(10),这时候,myMethod得到的是

mlgb456的专栏 6948

(8)机器人动力学

机器人是一个具有多输入多输出的复杂动力学系统,存在严重的非线性,需要非常系统的方法对机器人进行动力学研究。常用的机器人动力学建模方法有:Lagrange(拉格朗日)动力学方法、Newton-Euler(牛顿-欧拉)动力学方法、Gauss(高斯)动力学方法、Kane(凯恩)动力学方法等。机器人动力学研究的是机器人的运动和作用力之间的关系。机器人的动力学问题包括动力学正问题和动力学逆问题。动力学正问题是对于给定的关节驱动力......

rouyu308的博客 9499

primitive数据类型

数值型:整数形:byte,short,int,long 非整数型:float,double。 非数值型:char,boolean boolean =false(默认值)/true(理论上占用1bit,1/8字节,实际处理按1byte处理) byte=0 1字节 short=0 2字节    char=‘\u0000’ 2字节(C语言中是1字节)可以存储一个汉字 int=0 4字节     floa...

versus117的博客 509

时序SDC约束set_data_check及常见应用场景

时序约束SDC之set_data_check命令及常见应用场景解析

weixin_37584728的博客 2288

.NET:注意 Primitive 这个小坑

背景 有个需求,需要递归遍历类型的所有属性(属性的属性),然后对不同的类型做不同的处理,或者只是将类型分为三类:Primitive、Complex 和 Collection。因为 MS 的 Type 提供了 IsPrimitive 属性,这里重点说下我对 Primitive 的期望,原本以为肯定要包含:Decimal,有可能包含:String,可是并非如此。 Type.IsPrimitive ...

weixin_34015336的博客 181

STM32实现薄膜压力传感器数据采集(标准库和HAL库实现)

薄膜压力传感器采集压力数据

XiaoCaiDaYong的博客 3万+

.Net框架程序设计-读书笔记(第五章 基元类型、引用类型和值类型)

1. 基元类型、引用类型和值类型1.1. 基元类型编译器直接支持的类型称为基元类型(primitive type)。基元类型和.NET框架类库中的类型有直接的映射关系。1)       编译器能够在基元类型之间进行隐式或者显式的转型;2)       基元类型能够以文本常量(literals)的形式出现;3)       如果表达式中含有文本常量,编译器能够在编

包子的专栏 1363

骨架动作识别新突破:CTR-GCN的通道拓扑优化策略解析

本文深入解析了CTR-GCN在骨架动作识别中的通道拓扑优化策略。通过引入通道级拓扑细化,CTR-GCN克服了传统GCN共享拓扑结构的局限性,显著提升了动作识别的准确率。文章详细介绍了CTR-GCN的三大核心组件设计,包括特征变换模块、通道拓扑建模和通道聚合技术,并提供了实战调参经验和模型压缩技巧,为计算机视觉领域的研究者和开发者提供了有价值的参考。

weixin_27310417的博客 193

SAP ABAP CO核心扩展-ZCKMLQS 多物料工厂的评估数量结构报表(CKMLQS)

CKMLQS 只能查看单一物料工厂的评估数量结构,SAP 没有提供多物料工厂的评估数量结构报表。这篇文章将实现 CO核心扩展-ZCKMLQS 多物料工厂的评估数量结构报表。

SAP李斌,本人承诺所有原创文章均不使用任何AI生成技术,请大家放心阅读。 1091

C#详解值类型和引用类型区别

首先,什么是值类型,什么是引用类型? 在C#中值类型的变量直接存储数据,而引用类型的变量持有的是数据的引用,数据存储在数据堆中。 值类型(value type):byte,short,int,long,float,double,decimal,char,bool 和 struct 统称为值类型。值类型变量声明后,不管是否已经赋值,编译器为其分配内存。         引用类型

10万+

【推荐100个unity插件】Animator 的替代品?—— Animancer Pro插件的使用介绍

Animancer与Unity Animator对比及使用指南 摘要: 本文对比了Animancer与Unity官方Animator的核心差异,分析了Animancer的优势特点。Animancer采用代码驱动模式,相比Animator的状态机系统更灵活高效,支持实时调试、动态混合和深度逻辑集成。文章详细介绍了Animancer的快速使用方法,包括动画播放、切换和触发机制,并区分了免费版与专业版的功能差异。适合需要高效动画开发、复杂交互逻辑的中小项目,为开发者提供了一种现代化的动画解决方案。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 2434

NET框架程序设计-第5章基元-引用-值类型

int a = 0;以上两种分配整数类型,都生成同样的 IL 代码,基元类型和 .NET 框架类库(FCL)中的类型有直接的映射关系。例如,在 C# 中,int 直接映射为 System.Int32 类型。表 5.1 显示了 FCL 中的类型和它们在 C# 中对应的基元类型。本书作者提倡编译器不要提供基元类型名称,并强制开发人员使用 FCL 类型名,理由如下:比如在 C# 中的 string 实际上映射了 System.String(FCL 类型)。long 映射为 System.Int64。

用来学习的地方 732

控制科学与工程(自动化)保研经验【4】——浙大篇

控制科学与工程(自动化)保研经验【4】——浙大篇

Control Everything 1万+

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

什么是List?如何声明与初始化?引用类型 ?值类型(value type)?装箱 (boxing)?

命名空间:System.Collections.GenericList 类是 ArrayList 类的泛型等效类。该类使用大小可按需动态增加的数组实现 IList 泛型接口。List dinosaurs = new List();确保线程安全的唯一方法是在整个枚举期间锁定集合。

56 4812

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

.NET类型对象的判等(Equals)

申明::本文内容来自>    .NET类型分为:基元类型(Primitive type),引用类型(Reference type),值类型(Value type),所有这些类型的祖先是System.Object,System.Object提供了四个成员函数:Equals GetHashCode GetType ToString ,以确保每个继承类型都有一个最小的操作集合,但是在我们设计.NET类型

Vigor's Blog 2731

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

栈和托管堆.值类型和引用类型.强制类型转换.装箱和拆箱[C#]

一、栈和托管堆    通用类型系统(CTS)区分两种基本类型:值类型和引用类型。它们之间的根本区别在于它们在内存中的存储方式。.NET使用两种不同的物理内存块来存储数据—栈和托管堆。如下图所示: 值类型总是在内存中占用一个预定义的字节数(例如,int类型占4个字节,而string类型占用的字节数会根据字符串的长度不同而不同),当声明一个值类型变量时,会在栈中分配适当大小的内存(除了引用类型的值

人生咏叹调 687

《.NET框架程序设计》第5章 基元类型、引用类型与值类型

5.1 基元类型基元类型可以用快捷语法。比如int a=0;等同于System.Int32 a=new System.Int32();建议,使用全名,为了代码含义看起来更清晰。5.1.1 Checked与Unchecked基元类型操作默认情况下,编译器溢出检查是关闭。使用/checked+命令开启溢出检查。数值运算溢出会抛出OverflowException异常。使用/checked-命令关闭溢出...

weixin_33831196的博客 95

C#基础 泛型 default 值类型为0,引用类型为null

 .NET Framework : 4.7.2        IDE : Visual Studio Community 2019         OS : Windows 10 x64     typesetting : Markdown         blog : blog.csdn.net/yushaopu        gi...

心少朴 842

值类型与引用类型

ASP.Net+Android+IOS开发、.Net培训、期待与您交流! 在C#中 基本类型都是值类型比如 short 、int 、long、 double 、 float 、 bool  、结构类型 、 枚举类型  都是值类型 需要注意  值类型声明的数组是引用类型的 值类型都继承自System.ValueType 数组、string、类、自定义的数据类型、接口、委托

DarkHorse33136671的专栏 476

C#的两种类据类型:值类型和引用类型

复习一下 本文主要是讨论栈和堆的含义,也就是讨论C#的两种类据类型:值类型和引用类型;   虽然我们在.net中的框架类库中,大多是引用类型,但是我们程序员用得最多的还是值类型。   引用类型如:string,Object,class等总是在从托管堆上分配的,C#中new操作符返回对象的内存地址--也就是指向对象数据的内存地址。   以下是值类型与引用类

流年轻逝 521

品味.NET巨著——书评《Microsoft .NET框架程序设计(修订版)》

                  品味.NET巨著 ——书评《Microsoft .NET框架程序设计(修订版)》  李洪根(本文首发于《程序员》2004年第2期)  在经历了漫长的等待后,我们终于看到了清华大学出版社组织重译的《Microsoft .NET框架程序设计(修订版)》一书。本书英文原名是Applied Microsoft .NET Frame

李洪根的blog-专注软件开发技术 4173

Microsoft.NET.框架程序设计 值类型与引用类型

<br />1、该类型的行为类似于基元类型<br />2、该类型不需要继承自其他类型<br />3、该类型不会被其他类型继承<br />4、该类型的实例不会频繁地用于方法的参数传递,默认情况下,参数以传值的方式传递,这样会导致值类型中的字段被拷贝,从而损伤应用程序的性能。<br />5、该类型的实例不会作为方法的结果频繁的返回。从方法中返回的一个值类型也会导致实例中的字段拷贝到调用者的分配的内存中,因此会损伤应用程序的性能。<br />6、该类型的实例不会被频繁地用于诸如 ArrayList,Hastabl

hei25hei的专栏 304

C#的两种类据类型:值类型和引用类型;

本文主要是讨论栈和堆的含义,也就是讨论C#的两种类据类型:值类型和引用类型;   虽然我们在.net中的框架类库中,大多是引用类型,但是我们程序员用得最多的还是值类型。   引用类型如:string,Object,class等总是在从托管堆上分配的,C#中new操作符返回对象的内存地址--也就是指向对象数据的内存地址。   以下是值类型与引用类型的表:     

宜臶瑏芯的博客 276
上一篇: 《.NET框架程序设计》第四章 类型基础
下一篇: 《.NET框架程序设计》第六章 通用对象操作
Ninth
博客等级 码龄22年 4粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值