以下有两个题目,哪个是正确的?哪个是错误的?为什么?
一、
Point p1 = new Point(18,20); //Point是struct
Point p2 = p1;
如果置 p1.x=35;
则 p2.x也是35
二、
Person p1 = new Person(18); //Person是引用类型
Person p2 = p1;
如果 p1.age=35;
则 p2.age也是35
为什么“struct是值类型,类是引用类型。”就得出这样的结果,能不能解释详细一点呢??
追答c#中数据类型分值类型和引用类型的,类似int,double,struct都是值类型,值类型是存储在栈中的,比如int a=10,int b=a; 那么这是什么意思,这就是在栈中开辟了一块存储空间,咱们叫它a,里边存的10,b=a,这句话就是又重新开辟了一块存储空间,里边存的也是10,所以a,b虽然值相同,但是存储空间不同,改变a的话,b不会改变,同理改变b,a也不会变,就好比你写int a=10;int b=a; b=20; 难道a也变成20了?? 那是不可能的。
引用类型和值类型不同,引用类型,比如类Person p=new Person(); 这个怎么存储,其实这个p的具体内容存储在堆中,比如p.age,p.name等,而p这个索引其实在栈中,那你为什么通过p就能拿到p.name,p.age等,是因为p这个索引在栈中存储的是一个地址,是指向堆中的。
打个比方吧,引用类型是这样的,你去找一个人,我可以直接给给你说那就是,你看见了,就很类似与值类型,而引用类型,你找一个人,我给你一张卡片,上边写着门牌号709,你拿着这个找到709就找到他了。
所以说
Person p1 = new Person(18); //Person是引用类型
Person p2 = p1;
如果 p1.age=35;
则 p2.age也是35
这样的代码通俗一点讲,p1是那个门牌号,p1把自己门牌号给了p2一份,那么p1,p2指向的是一个房间,那么p1.age,改的就是p1所对应的那个房间的内容把,但是p1,p2指向的是一个房间,p1.name改变注定p2.name也改了。
c#中数据类型分值类型和引用类型的,类似int,double,struct都是值类型,值类型是存储在栈中的,比如int a=10,int b=a; 那么这是什么意思,这就是在栈中开辟了一块存储空间,咱们叫它a,里边存的10,b=a,这句话就是又重新开辟了一块存储空间,里边存的也是10,所以a,b虽然值相同,但是存储空间不同,改变a的话,b不会改变,同理改变b,a也不会变,就好比你写int a=10;int b=a; b=20; 难道a也变成20了?? 那是不可能的。
引用类型和值类型不同,引用类型,比如类Person p=new Person(); 这个怎么存储,其实这个p的具体内容存储在堆中,比如p.age,p.name等,而p这个索引其实在栈中,那你为什么通过p就能拿到p.name,p.age等,是因为p这个索引在栈中存储的是一个地址,是指向堆中的。
打个比方吧,引用类型是这样的,你去找一个人,我可以直接给给你说那就是,你看见了,就很类似与值类型,而引用类型,你找一个人,我给你一张卡片,上边写着门牌号709,你拿着这个找到709就找到他了。
所以说
Person p1 = new Person(18); //Person是引用类型
Person p2 = p1;
如果 p1.age=35;
则 p2.age也是35
这样的代码通俗一点讲,p1是那个门牌号,p1把自己门牌号给了p2一份,那么p1,p2指向的是一个房间,那么p1.age,改的就是p1所对应的那个房间的内容把,但是p1,p2指向的是一个房间,p1.name改变注定p2.name也改了。
二是正确的。但是以后遇到这种事情,最好是直接写一遍例子,加深印象。
using System;C#值类型和引用类型的区别
(1)值类型:数据存储在内存的堆栈中,从堆栈中可以快速地访问这些数据,因此,值类型表示实际的数据。(2)引用类型:对象、数组、函数。1、值类型:包括:sbyte、short、int、long、float、double、decimal(以上值类型有符号)byte、ushort、uint、ulong(以上值类型无符号)bool、char2、引用类型:包括:对...
c#中什么是值类型什么是引用类型
值类型和引用类型:值类型的变量直接包含他们的数据,而引用类型的变量存储 引用类型存储对他们的数据的引用,后者称为对象:简单说:值类型直接存储其值,引用类型存储对值得引用.引用类型分为引用和引用的对象。2***、值类型:简单类型、枚举、结构 引用类型: 类类型、接口类型、数组类型和委托类型 3*...
C#中数据类型有哪些?
C#语言中数据类型主要分为两大类:值类型和引用类型,其中值类型包含整数、浮点数、高精度浮点数、布尔、字符、结构和枚举,而引用类型则包括对象(Object)、字符串、类、接口、委托以及数组。具体来说,整数类型包括了整数、长整数、长长整数和无符号整数等;浮点数类型包括单精度浮点数和双精度浮点数;...
说明C#中值类型与引用类型的区别。
在C#中有两种类型的数据,一种是值类型数据,一种是引用类型数据。在编码的时候区分这两种类型数据,可以避免一些细小的编码错误。首先说说什么类型是值类型,例如:int、float、bool之类的基础类型,以及用struct定义的类型,如:DateTime。除此外,如string,数组,以及用class定义的类型等都是引用类型。对...
c#的数据类型有哪些
C# 中有两种类型:值类型 (value type) 和引用类型 (reference type)。值类型的变量直接包含它们的数据,而引用类型的变量存储对它们的数据的引用,后者称为对象。对于引用类型,两个变量可能引用同一个对象,因此对一个变量的操作可能影响另一个变量所引用的对象。对于值类型,每个变量都有它们自己的...
C#有几种数据类型 他们的作用
类(class)是一组具有相同数据结构和相同操作的对象集合。接口(interface)应用程序之间要相互调用,就必须事先达成一个协议,被调用的一方在协议中对自己所能提供的服务进行描述。在C#中,这个协议就是接口。委托(delegate)用于封装某个方法的调用过程。数组(array)主要用于同一数据类型的数据进行批量...
c#中值类型和引用类型的区别
1、速度上的区别 值类型存取速度快,引用类型存取速度慢。2、用途上的区别 值类型表示实际数据,引用类型表示指向存储在内存堆中的数据的指针或引用。3、来源上的区别 值类型继承自System.ValueType,引用类型继承自System.Object 4、位置上的区别 值类型的数据存储在内存的栈中,引用类型的数据存储在内存...
C#中的数据类型区别
值类型在内存中是这个值直接存在 栈 里。Point p1 = new Point(18,20); \/\/直接在栈里开辟一块空间存放p1的值Point p2 = p1;\/\/栈里开辟一块空间存放p2的值,p2的值与p1相等。p1.x=35;\/\/对p1重新赋值,p1空间里存放的值也就改变了。但是我们没对p2重新赋值,所以p2空间里的值没变。p1、...
c#的数据类型
基本数据类型:C#拥有比C\/C++或者Java更广泛的数据类型.这些类型是bool、byte、ubyte、short、ushort、int、uint、long、ulong、float、double和decimal,像Java一样,所有这些类型都有一个固定的大小.又像C和C++一样,每个数据类型都有有符号和无符号两种类型.与Java相同的是,一个字符变量包含的是一个...
C#中有哪些常用的数据类型
float类型:32位浮点数,取值范围在 double类型:64位浮点数,取值范围在 布尔型 bool true false 结构型 struct 如 public struct Point { int x;int y;string s;} 结构和类的区别:结构是一个值类型(在栈上),而类是一个引用 类型(在堆上)。枚举型 enum类型 常用形式有:enum days {...