值类型

类型可以分为两类:引用类型和值类型。

值类型:

  值类型直接包含值,变量引用位置就是值在内存中实际存储的位置。需要的内存会在编译时固定下来,不会在运行时改变。因为大小是固定的,所以值类型可以存储在称为stack的内存区域。

引用类型:

  引用类型和引用它们的变量指向数据存储位置,引用类型存储的是对一个内存位置的引用(内存地址),要去那个位置才能找到真正的数据。引用类型指向内存的区域称为堆(heap)。

两者比较:引用类型比值类型速度慢,利用率好,更有效。

在C#中除了string和object所有的类型都是值类型。

struct的初始化

  struct可以包含属性、字段、方法和构造器,不能包含默认(无参数)的构造器。

  C#禁止用户显式定义默认构造器。

  C#禁止在声明时对实例字段进行赋值。如下:声明的同时初始化struct的一个字段会造成错误

struct Angle
{
  int _Hours = 42;
}

  C#支持带参数的构造器,但必须对struct中的所有字段进行初始化。

  struct不支持终结器

default运算符的使用

  指定一个特定类型的默认值。

//用default运算符来获取某个类型的默认值
struct Angle
{
   public Angle(int hours, int minutes)
        :this(hours, minutes, default(int))
   {}
}

值类型的继承和接口

装箱

  定义:从一个值类型转换成它实现的某个接口或者它的根基类object,这样的转型过程称为装箱。

  装箱过程, 涉及以下几个步骤:

  (1)在堆中分配好内存;

  (2)接着发生一次内存复制动作,栈上的值类型数据复制到堆上分配好的位置;

  (3)最后,对象或接口引用得到更新,指向堆上的位置;

枚举

   枚举不能是char类型

     枚举转换为基础类型以及从基础类型转换为枚举类型都涉及显式转型,而不是隐式转型。(存在从0到任何枚举的隐式转换)

值类型,布布扣,bubuko.com

时间: 2024-10-06 01:14:58

值类型的相关文章

值类型与引用类型的区别

值类型 基本类型  4类8种 整型  byte   字节型   1长度   0~255 short  短整型   2长度 int      整型      4长度 long   长整型   8长度 浮点型  float     单精度浮点型 double 双精度浮点型 字符型  char  单字符型  数据必须包裹在单引号之间 波尔型  bool  逻辑型  true 真.对 /  false  假.错 枚举类型 结构体 引用类型               字符串   string  多个字符

C# 引用类型和值类型

1.引用类型 FCL(Framework)中的大多数类型都是引用类型,引用类型总是在托管堆中分配的,C#的new操作符会返回对象的内存地址,也就是指对象数据的内存地址.在使用引用类型时,存在以下性能问题,这是我们在开发中必须要注意的: a.内存必须从托管堆上分配(也就是说每new一个对象,会占用内存,对象过多就会导致内存占用) b. 堆上分配的每个对象都有一些额外的成员,这些成员必须初始化 c.对象中的其他字节(为字段而设),总是设为0 d.从托管堆中每分配一个对象,可能强制执行一次垃圾回收操作

CLR via c# 值类型“不可变”

昨天看书看到引用类型和值类型,书中讲到值类型“不可变”,如图: 看了两遍没怎么看懂,又仔细多看了几遍,说下我的理解: 比如说一个int类型有几个成员, MaxValue.MinValue的值是不可变的,因为它可以理解为一个枚举(不可变的字段成员). 比如说: int i1 = 1; int i2 = 4; int maxValue = int.MaxValue; 不管你怎么定义变量,int的最大值是不会被改变的. 这是我的个人理解,有错误的话欢迎指正. QQ:641591140

定义类+类实例化+属性+构造函数+匿名类型var+堆与栈+GC回收机制+值类型与引用类型

为了让编程更加清晰,把程序中的功能进行模块化划分,每个模块提供特定的功能,而且每个模块都是孤立的,这种模块化编程提供了非常大的多样性,大大增加了重用代码的机会. 面向对象编程也叫做OOP编程 简单来说面向对象编程就是结构化编程,对程序中的变量结构划分,让编程更清晰. 类的概念: 类实际上是创建对象的模板,每个对象都包含数据,并提供了处理和访问数据的方法. 类定义了类的每个对象(称为实例)可以包含什么数据和功能. 类中的数据和函数称为类的成员:数据成员        函数成员 数据成员: 数据成员

匹夫细说C#:不是“栈类型”的值类型,从生命周期聊存储位置

匹夫细说C#:不是"栈类型"的值类型,从生命周期聊存储位置 c#语言规范 阅读目录 0x00 前言: 0x01 堆vs栈? 0x02 谁"能"使用栈? 0x03 结论 0x04 后记补充 回到目录 0x00 前言: 匹夫在日常和别人交流的时候,常常会发现一旦讨论涉及到"类型",话题的热度就会立马升温,因为很多似是而非.或者片面的概念常常被人们当做是全面和正确的答案.加之最近在园子看到有人翻译的<C#堆vs栈>系列,觉得也挺有趣,挺不错

Java值类型和引用类型

[定义] 引用类型表示你操作的数据是同一个,也就是说当你传一个参数给另一个方法时,你在另一个方法中改变这个变量的值, 那么调用这个方法是传入的变量的值也将改变.值类型表示复制一个当前变量传给方法, 当你在这个方法中改变这个变量的值时,最初生命的变量的值不会变.通俗说法: 值类型就是现金,要用直接用:引用类型是存折,要用还得先去银行取现.----(摘自网上) [值类型] 也就是基本数据类型 基本数据类型常被称为四类八种 四类: 1,整型 2,浮点型 3,字符型4,逻辑型 八种: 1,整型3种 by

java 值类型和引用类型的区别

1. Java中值类型和引用类型的不同? [定义] 引用类型表示你操作的数据是同一个,也就是说当你传一个参数给另一个方法时,你在另一个方法中改变这个变量的值, 那么调用这个方法是传入的变量的值也将改变.值类型表示复制一个当前变量传给方法, 当你在这个方法中改变这个变量的值时,最初生命的变量的值不会变.通俗说法: 值类型就是现金,要用直接用:引用类型是存折,要用还得先去银行取现.----(摘自网上) [值类型] 也就是基本数据类型 基本数据类型常被称为四类八种 四类: 1,整型 2,浮点型 3,字

值类型,引用类型

值类型 (value type) 一种由类型的实际值表示的数据类型.如果向一个变量分配值类型,则该变量将被赋以全新的值副本.(这与引用类型不同,在引用类型中,赋值时不创建副本.)值类型通常创建在方法的栈帧上,而不是在垃圾回收堆中.可以对值类型进行装箱,这是一个创建相应引用类型的过程. 引用类型 (reference type)  由类型的实际值引用(类似于指针)表示的数据类型.如果为某个变量分配一个引用类型,则该变量将引用(或“指向”)原始值.不创建任何副本.引用类型包括类.接口.委托和装箱值类

值类型与引用类型

1. 引用类型表示你操作的数据是同一个,也就是说当你传一个参数给另一个方法时,你在另一个方法中改变这个变量的值,那么调用这个方法时传入的变量的值也将改变. 值类型表示复制一个当前变量传给方法,当你在这个方法中改变这个变量的值时,最初生命的变量的值不会变. 2.值类型也就是常见的基本数据类型:数值型,字符型,布尔型 引用类型:除了基本数据类型外,所有的类型都称为引用类型 3.举例说明,在内存中有一个长方形(假设),里面放着一个数n 值类型是基本数据类型,如int,float,byte,double

c# 值类型与引用类型 值传递与引用传递

值类型与引用类型: 值类型 :1.值类型大小固定.存储在栈上.  2.不能继承,只能实现接口 3.派生自valuetype int double char float byte bool enum struct decimal 引用类型:1.在栈上存储了一个地址实际存储在堆中,大小不固定. 2.数组.类.接口.委托 string 数组 类 接口 委托 值传递与引用传递: 值类型按值传递.值类型按引用传递.引用类型按值传递.引用类型按引用传递. 值传递:默认传递都是值传递 ,把栈中内容拷贝一份引用