C#基本语法复习-理解值和引用

复制值类型的变量和类:

  除了string类型为引用类型外,C#的大多数基本数据类型都是值类型。

  值类型复制时,会产生一个副本,对副本的修改不会对原值产生影响,而对于引用类型,对象只有一个是存储在堆上的,复制时只是将其引用进行复制,应用中包含了该对象的一个地址。

理解null值和可空类型:

  可以将null赋值给引用变量。

使用可空类型:

  null为一个引用不能将其赋给值类型,但是可以将一个变量声明为可空的值类型,int? i=null;

理解可空类型的属性:

  hasvalue属性指出一个可空类型是包含一个真正的值,还是一个包含null,通过value属性可以获得值。

使用ref与out操作:

  为了实现形参修改实参。

创建ref参数:

  如果为一个参数附加了ref关键字作为前缀,该参数就会成为实参的一个别名,而不是一个副本,想一个ref参数传递一个实参时,实参也必须附加ref关键字作为前缀,格式如:

  void a(ref int a)

  {a++;}

  void b()

  {int arg=42;

  a(ref arg);}

  变量使用前必须赋值;

创建out参数:

  out参数可由方法本身来初始化参数,在方法体中对实参进行初始化;

计算机的内存组织方式:

  操作系统和运行时通常将用于容纳数据的内存分为两个独立的区域,每个区域都采用不同的方式进行管理,这两个区域就称为栈和堆;

  调用一个方法时,它的参数以及它的局部变量需要的内存总是从栈中获取,方法结束后,为参数和局部变量分配的内存将自动归还给栈

  使用new关键字来创建一个对象时,构造对象所需的内存总是从堆中获取的;

system.object类:

  为所有类的一个基类;

装箱:

  用object引用一个值类型如下:

  int i=32;

  object o=i;

  运行时在堆中分配一小片内存,然后i中的值的一个副本被复制到再片内存中,最后让o引用这个副本,这种将一个数据从栈自动复制到堆中的行为叫做装箱;

拆箱:

  对已装箱的值进行前值类型转换

数据类型的安全转换:

  is与as 操作符 is o is 类型 返回值是一个bool类型的值,as操作符则在判断的同时如果成功则直接返回该类型,失败则为null

  

时间: 2024-10-28 11:12:27

C#基本语法复习-理解值和引用的相关文章

理解PHP的变量,值与引用的关系

--- title: 理解PHP的变量,值与引用的关系 createdDate: 2015-03-11 category: php --- PHP的变量与C++中的变量是两种截然不容的概念.如果没有理解清楚,使用C++的方式来思考PHP就会遇到一些问题. C++中,变量与值是绑定的.值是内存的上的一块内存上的数据,而变量则是操作这块内存的名称.变量消失(比如超出作用域)值也会消失. 而PHP中,变量和值是两个概念.PHP是一种弱类型语言,值在PHP的内部(zend引擎),被存放在一个zval结构

Jvm(31),理解升级----通过JVM内存模型深入理解值传递和引用传递两种方式

值传递和引用传递分析 Java中数据类型分为两大类:基本类型和引用类型(也就是对象类型). 基本类型:boolean.char.byte.short.int.long.float.double 引用类型:类.接口.数组 因此,变量类型也可分为两大类:基本类型和引用类型. 在分析值传递和引用传递之前,建议了解下以上变量类型在Java内存管理模型中的位置,如果对此有所了解,将更加有助于理解两种传递的方式^_^ 在Java内存中,基本类型变量存储在Java栈(VM Stack)中,引用变量存储在堆(H

复习PHP-语言参考-引用

1.引用指的是不同的名称访问同一个变量内容 最简单的例子为: <?php $a = &$b; ?> 在形参中加入引用变量,则实参会在函数执行时被影响. 自 PHP 5 起,new 自动返回引用,所以$a = & new a;会报错. 注意以下一个示例: <?php $a = 5; $b = 7; function foo() {     global $a,$b;     $b = &$a; // if $GLOBALS['b'] = &$a;  $b的值

理解 php 中&amp; 引用

php中引用&的真正理解-变量引用.函数引用.对象引用 php的引用(就是在变量或者函数.对象等前面加上&符号) //最重要就是 删除引用的变量 ,只是引用的变量访问不了,但是内容并没有销毁 在PHP 中引用的意思是:不同的名字访问同一个变量内容. 变量的引用        PHP 的引用允许你用两个变量来指向同一个内容 <?php $a="ABC"; $b =&$a; echo $a;//这里输出:ABC echo $b;//这里输出:ABC $b=&q

【我的OOP学习笔记】值与引用(2)语义类型

值与引用 值语义的对象是独立的,语义的对象却是允许共享的.由于Java不支持值类型对象,Java程序员才更需要加强这方面的意识.语法和语义并不总是一致的——语法上的值类型可能在语义上是引用类型,语法上的引用类型可能在语义上是值类型.永远不要忘记一个基本原则:语法只是手段,语义才是目的. 为了判断一个类型的语义,那么简明的‘石蕊测试法’便是一个很好的选择.在不影响程序正确性的前提下,一个对象的复件能否代替原件?如果可以则该对象的类型是值语义的,否则是引用语义的.(这种判断方法与语法无关,完全取决于

C# 函数参数传递(按值和引用)

C#中的数据类型.分值类型和引用类型两大类. 值类型:直接存储数据的值,保存在内存中的stack(堆栈)中 引用类型:存储对值的引用,实际上存储的就是一个内存的地址.引用类型的保存分成两块,实际值保存在托管堆(heap)中.实际值的内存地址保存在stack中 当使用引用类型时先找到stack中的地址,再找到heap中的实际值. 也就是说保存引用类型时要用到stack和heap,但使用引用类型时我们实际上只用到stack中的值,然后通过这个值间接的访问heap中的值 C#预定义的简单类型,像int

js中 原始值和引用值

在 ECMAScript 中,变量可以存在两种类型的值,即原始值和引用值. 原始值-----存储在栈(stack)中的简单数据段,也就是说,它们的值直接存储在变量访问的位置; 引用值-----存储在堆(heap)中的对象,也就是说,存储在变量处的值是一个指针(point),指向存储对象的内存处. 如果一个值是引用类型的,那么它的存储空间将从堆中分配.由于引用值的大小会改变,所以不能把它放在栈中,否则 会降低变量查寻的速度.相反,放在变量的栈空间中的值是该对象存储在堆中的地址.地址的大小是固定的,

js 值和引用

js对值和引用的赋值/传递在语法上没有区别,完全根据值得类型决定 简单值(即标量基本类型值),总是通过值复制的方式来赋值/传递,包括null,undefined,字符串,数字,布尔值和ES6中的symbol. 复合值--对象(包括数组和封装对象)和函数,则总是通过引用复制的方式来赋值/传递. __________________________________ 简单值 var a0=2;var b0=a0;b0++;console.log(a0);//2console.log(b0);//3 简

深入理解指针和引用的区别及引用与原值的区别

用法上的基本区别(包括sizeof和typeid)就不多说了,相信大家都了然于心,不清楚随便google一下也有一大堆. 下面从对象模型的角度去深入的谈谈指针和引用的区别,亦我们有了指针,为什么还要用引用. 1) 形式 这里所说的形式指的是运算符重载时的形式一致,事实上,在c++中,只有运算符有形式上确定的规定,因此,在重载[]运算符时,为了保持形式的一致性,就必须使用引用. 2) 临时变量 可以用const A&来引用一个临时变量(这同时证明了临时变量是有地址的,只不过该地址不能通过&取