C#值类型-引用类型
转换-值类型-引用类型-预定义分类表
转换
C#里,兼容的实例间可以进行相互转换
转换总是从一个值转换成一个新的值
隐式转换:隐式转换是自动发生的
显式转换:显式转换是手动操作的
长整型转换成整型的时候可能会导致数据丢失,所以要用显示转换
如果编译器断定转换不能成功的化两种转换都是会被禁止的
static void Main(string[] args){int i = 3;long a = i;//因为int是整型,long是长整型,已经包括了int的情况下直接隐式转换short b = (short)i;//由于short比long的范围小,所以i前面需要指定short,显示转换}
值类型和引用类型
值类型包含了所有的内置类型:数值,字符,bool,自定义的结构体struct,枚举neum
引用类型包括所有的class,数组,委托delegate,接口interface,string字符串。
两种的根本区别在于处理内存的方式
这个是值类型的结构图
用public struct 创建一个自定义的值类型,类型名point
创一个新的p1点,赋值,赋值又赋值给p2,在这个内存里发生了复制,此时打印都是7
再重新赋值给p1,赋值的地址与复制的内存地址不同了,所以p2也不会再发生变化了
引用类型赋值:给引用类型的变量赋值,复制引用,而不是复制实例
所以这种情况下允许多个变量引用同一个对象,值类型就不行。
static void Main(){ Ask p1 = new Ask();p1.x = 9;Ask p2 = p1;//p2=9,复制了p1的引用,p1.x = 10;//此时改变了p1对象的值,然后p2也是同一个对象System.Console.WriteLine(p2.x);//所以这里p2也等于10}
public class Ask{public int x;public int y;}
这个是引用类型的结构图
null
可以把null赋值给引用,表示引用不指向任何一个对象
Ask p = null;System.Console.WriteLine(p == null);
普通的值类型不可以为null,编译不通过
值类型:
意思就是用的类型最大存储为多少,它占用的就为多少
引用类型:
内置类型分类
特殊例子:
string虽然是引用类型,但是string具有不可变性
例子:
string s1 = "张三";string s2 = s1;s2 = "李四";Console.WriteLine(s1)Console.WriteLine(s2);
结果:s1=张三 s2=李四 string虽然为引用类型,但是string具有不可变性
C#值类型-引用类型相关推荐
- 变量/值类型/引用类型/常量/枚举
变量 声明语法 datatype identifier; 如:int i; //声明一个int类型的变量,但是在没有初始化之前编译器不允许使用该变量 同时声明多个 int a,b;//同时声明两个in ...
- javascript基本数据类型与值类型引用类型说明
DEMO: http://sources.ikeepstudying.com/jsdata/ 摘要:本文主要讲了javascript中的基本数据类型,以及值类型和引用类型的区别与使用 一.基本数据类型 ...
- 关于C#值类型,引用类型,值传递,引用传递
说到参数传递,必须得弄清值类型和引用类型: (为了容易表达,我暂且命名存放在堆中的内容为堆中对象,存放在栈上的内容为栈中对象.) 值类型存放在栈中,直接访问.如果有:int a=0;int b=a;就 ...
- C#基础_值类型引用类型(十一)
值类型和引用类型: 值类型包括:byte,short,int,long,char,float,double,bool,struct结构 引用类型包括:类类型,接口类型和数组 等. 值类型和引用类型特点 ...
- 值类型 引用类型 堆栈 堆 之 异想
看了很多值类型 和 引用类型的文章(谷歌能搜索出来的) 看了越多疑问越大,而这些资料中没有具体的说明. 问题: 1.堆栈 和 堆 分别存于计算机的哪个硬件(CPU缓存,内存,硬盘)? 2.为什么只有值 ...
- 6个重要的.NET概念:栈,堆,值类型,引用类型,装箱,拆箱
引言 本篇文章主要介绍.NET中6个重要的概念:栈,堆,值类型,引用类型,装箱,拆箱.文章开始介绍当你声明一个变量时,编译器内部发生了什么,然后介绍两个重要的概念:栈和堆:最后介绍值类型和引用类型,并 ...
- C# 值类型 引用类型 作为参数传递区别
C#数据类型分类: http://msdn.microsoft.com/zh-cn/library/t63sy5hs(v=VS.80).aspx. 值类型作为参数传递: http://msdn.mic ...
- iOS开发-Swift进阶之值类型 引用类型!
本文主要介绍为什么结构体是值类型,类是引用类型 值类型 图片看不了请前往简书 前提:需要了解内存五大区,,如下所示 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XFI ...
- 栈,堆,值类型,引用类型,装箱,拆箱 .NET中 6个重要的概念
== 转载于:https://www.cnblogs.com/xiao-hei/p/3847525.html
最新文章
- 计算机一直在启动修复怎么关机,电脑开机一直要启动修复,自动修复好久开不了机,然后进去系统恢复选?...
- python:PATH、PYTHONPATH 和 sys.path 的区别
- c语言实现python列表_C语言实现的Python扩展模块
- mysql报错无效默认值1067_Mysql 报错:#1067 - Invalid default value for 'update_time
- 一系列图论问题[转]
- Packt和Java Code Geeks提供的$ 5 Java编程书籍!
- linux 内核配置过程中遇到的问题
- Python基础入门_5面向对象基础
- poj 1715 Hexadecimal Numbers 排列组合
- 简单的11步在Laravel中实现测试驱动开发
- [转载] python中随机数生成函数_python中seed随机函数如何生成随机数?
- 计算机系统组成 教案,计算机系统组成教学设计.doc
- 超简单!用 Python 为图片和 PDF 去掉水印
- Top命令查询结果界面参数详解
- TypeError: slice indices must be integers 数组索引必须是整数
- tp5+mysql写入特殊表情符号数据时失败
- 计算机组成原理之基本组成
- uCore OS(on RISC-V64)——LAB1:中断机制
- H.266/VVC的编码结构和块划分
- py学习9——linux常见指令