理解C#系列 / 核心C# / 数据类型
数据类型
数据类型
C#把数据类型分为两种:值类型和引用类型。
值类型和引用类型
值类型的变量直接指向存储的值,引用类型的变量指向值的引用。[理解:引用就像一个柜子的号码牌,可以顺藤摸瓜找到柜子。假如你再次对一个值类型的变量赋值,那么就会改变值,假如你再次对一个引用类型的变量赋值,那么就只是换了一个号码牌,指向了其他的柜子,对前一个柜子是不做修改的。]
这两种类型的数据存储在内存的不同地方,值类型数据存储在堆栈中,而引用类型的数据(值的引用)存储在托管堆上。
在使用的时候的区别
int i=;
int j=i;
int定义整数类型的变量,整数类型属于值类型,j在赋值的时候复制了i的值,所以这会在内存的两个地方存储值20,如果改变其中一个,不会影响另外一个。
Apple a = new Apple();
a.color = "red";
Apple b = a;
b.color = "green";
Apple是我们定义的苹果类型,我们用new Apple()创造了一个实际的苹果,并用引用类型的变量a指向了这个创造的苹果。
在第二行设定了苹果的颜色是红色。
在第三行我们添加了一个新变量,赋值了a这个引用类型的数据,所以b也是指向了a指向的那个苹果,并没有产生第二个苹果。
在第四行,我们修改b指向的苹果的颜色为绿色,这时候实际上查看a.color也会发现苹果的颜色是绿色了,因为始终就只有一个苹果呀。
Apple a = null;
这表示让一个苹果类型的变量不指向任何实际的苹果,如果你想使用这个变量a代表的实际的苹果,就会报错,因为没有东西呀,怎么能使用呢。值类型的变量就不可以赋值null,这是引用类型的专利。
当已经没有任何一个变量指向某个实例的时候,这个实例就不能被访问到了,CLR的垃圾收集器会定期找寻这样的实例,删除它们,把它们占用的内存返回给操作系统。
预定义数据类型
C#有15个预定义类型,其中13个是值类型,两个是引用类型(string和object)
13个值类型中有8个整型:{分正负的:8位sbyte,16位short,32位int,64位long}{无符号的:8位byte,16位ushort,32位uint,64位ulong}。
13个值类型中有2个浮点类型:{float:32位单精度浮点数}{double:64位双精度浮点数}。
13个值类型中还有:{decimal:通常用于财务计算的128位高精度十进制表示法}{bool:用于包含布尔值true或false}{char:为了保存单个字符的值}。
值类型的赋值方法:
int i = ;
uint ui = 1234U;
long l = 1234L;
long x = 0x12ab;//用16进制赋值需添加0x前缀
ulong ul = 1234UL;
float f = 12.3F
double d = 12.3;
decimal d = 12.30M;
bool b = true;
char c = 'A';
char c = '\n';//转义符
2个预定义的引用类型:{object:根类型,面向对象概念}{string:字符串类型,但拥有许多值类型的特性,使它常被误认为值类型}
理解C#系列 / 核心C# / 数据类型的更多相关文章
- 理解C#系列 / 核心C# / 判断&循环&跳转
判断&循环&跳转 说明 本节写的是C#语言的控制程序流的语句,“控制程序流”就是控制程序运行流程的意思. 判断 很容易理解:如果……就…… if语句:测试特定条件是否满足,如果满足就执 ...
- 理解C#系列 / 核心C# / 常量
常量 常量? 我对常量的理解就是在初始化完成后再也不变的“全局变量”. 定义常量 [const][空格][变量类型][空格][变量名称][=][值][:] const表示定义的是常量. 常量特点 常量 ...
- 理解C#系列 / 核心C# / 编译参数
编译参数 编译控制台应用程序 csc 源文件.cs 编译Windows应用程序 csc /t:winexe 源文件.cs 编译类库应用程序 csc /t:libray 源文件.cs 编译引用类库的应用 ...
- 理解C#系列 / 核心C# / 名称空间
名称空间namespace 名称空间 名称空间用来逻辑分类,而不是物理上的,名称空间与程序集无关[程序集:经由编译器编译得到的文件],同一个程序集中可以有2不同的名称空间,也可以在不同的程序集中定义同 ...
- 理解C#系列 / 核心C# / 枚举
枚举 如果没有枚举 //1代表s号:2代表m号:3代表l号:4代表XL号:5代表XXL号 ; ){ //快递发M号的衣服 } 有了枚举之后 声明枚举(请原谅我使用了中文汉字) public enum ...
- 理解C#系列 / 核心C# / 变量
变量 变量? 变量是对一个东西指定一个名称,变量的功能和人的名字差不多,提到名字就知道指的是什么. 变量类型? 变量类型说明了变量的类型,声明变量是一个整数,还是小数,还是字符,或是图像,或是人类,或 ...
- 深入理解JavaScript系列(10):JavaScript核心(晋级高手必读篇)
本篇是ECMA-262-3 in detail系列的一个概述(本人后续会翻译整理这些文章到本系列(第11-19章).每个章节都有一个更详细的内容链接,你可以继续读一下每个章节对应的详细内容链接进行更深 ...
- 深入理解JavaScript系列(24):JavaScript与DOM(下)
介绍 上一章我们介绍了JavaScript的基本内容和DOM对象的各个方面,包括如何访问node节点.本章我们将讲解如何通过DOM操作元素并且讨论浏览器事件模型. 本文参考:http://net.tu ...
- 深入理解javascript系列(4):立即调用的函数表达式
本文来自汤姆大叔 前言 大家学JavaScript的时候,经常遇到自执行匿名函数的代码,今天我们主要就来想想说一下自执行. 在详细了解这个之前,我们来谈了解一下“自执行”这个叫法,本文对这个功能的叫法 ...
随机推荐
- 如何进行js动态生成option?如何实现二级连动?
何为二级连动? 首先要明白什么是二级连动!顾名思义,就是一个动,另外一个也跟着一起动 看下面的例子: 这里有一个“市级”的选择列表框,还有一个“县级”的选择列表框,如果“市级”的选择列表框中的值发现变 ...
- 【JavaScript】JavaScript Promise 探微
http://www.html-js.com/article/Promise-translation-JavaScript-Promise-devil-details 原文链接:JavaScript ...
- TOJ3651确定比赛名次
确定比赛名次 Time Limit(Common/Java):1000MS/3000MS Memory Limit:65536KByte Total Submit: 23 ...
- oc-23-static
#import <Foundation/Foundation.h> #import "Person.h" int main(int argc, const char * ...
- 基于Raft构建弹性伸缩的存储系统的一些实践
基于Raft构建弹性伸缩的存储系统的一些实践 原创 2016-07-18 黄东旭 聊聊架构 最近几年来,越来越多的文章介绍了 Raft 或者 Paxos 这样的分布式一致性算法,但主要集中在算法细节和 ...
- 终端I/O之综述
终端I/O有两种不同的工作模式: 规范模式输入处理(Canonical mode input processing).在这种模式中,终端输入以行为单位进行处理.对于每个读要求,终端驱动程序最多返回一行 ...
- kafka的一些名词
broker.id 区kafka集群中每台机器的标识 log.dirs 日志的存放目录,这个最好不要放到/tmp目录下,因为kafka的已被消费和未被消费的数据也被当成“日志”存放到了日志目录,: l ...
- C#基础--.net平台的重要组成部分以及.net程序简单的编译原理
.net平台的组成只要有两部分 FCL:框架类库 CLR:公共语言运行时 .net程序简单的编译原理 1.0:使用C#编译器(csc.exe) 将C#源代码编译成程序集+{编译之前:会检查C ...
- DIH处理包含回车符换行符html标签内容的文本
数据样例:2010-03-19 10:18:06130010543234203guqun09-12月-12liuyin18-6月 -14<P style="MARGIN-TOP: 0p ...
- iOS 重力感应 学习1 陀螺仪 水平仪 指南针
小球可以随着重力感应 四处乱撞. 放大了坐标位移 就可以看见小球动了. 然后规定小球的路径 当滑到中间时候 弹出一张图片 作为提示. 我做了一个小demo 效果不错哦 CMMotionManager ...