
#8
詹妮斯
jen *** tian@gmail.com
关于装箱和拆箱
装箱: 将值类型转换为对象类型,实例:
int val = 8; object obj = val;//整型数据转换为了对象类型(装箱)
拆箱: 先前从值类型转换的对象类型将转换回值类型,例如:
int val = 8; object obj = val;//先装箱 int nval = (int)obj;//再拆箱
只能将装箱的数据拆箱
詹妮斯
詹妮斯
jen *** tian@gmail.com
3年前(2017-03-06)
#7
obj和int之间的关系
using System;
namespace RectangleApplication
{
class ExecuteRectangle
{
static void Main(string[] args)
{
int a=9;
object obj;
obj = a;
obj =10;
Console.WriteLine("2: {0}", a); // 输出:2: 9
Console.WriteLine("1: {0}", obj); // 输出:1: 10
Console.ReadLine();
}
}
}
设置值int a = 9; obj = a;当obj更改时,int a不会更改. 对象只是复制int a的值,然后对其进行操作. 不会影响int的原始值.

吸烟者
934 *** 908@qq.com
2年前(2017-11-12)
#6
中学
404 *** 626@qq.com
参考地址
C#中的字符串和字符串之间的区别
string是C#中的类,而String是.net Framework类(未在C#IDE中以蓝色显示)C#字符串映射到.net Framework中的String. 如果使用字符串,则编译器会将其编译为String. 因此,如果直接使用String,则可以使编译器的工作量减少.
如果使用C#,建议使用字符串,该字符串更符合规范. 字符串始终代表System.String(1.x)或:: System.String(2.0). 只有在使用System时才使用String;如果没有名为String的类型(类,结构,委托,枚举),则System.String是关键字,而String不是,这意味着不能将字符串用作类,结构,枚举,字段,变量,方法或属性. 名称,而String可以.
字符串是CLR的类型名称(也是关键字),字符串是C#中的关键字. 编译字符串时,默认情况下,C#编译器会将其转换为String,并在此处添加几行转换代码. 很多时候,建议使用CLR类型代替C#类型(这是专家的建议). 例如,还有: 使用int时最好使用Int32. 很多时候,这是习惯问题,是规范问题. 另一个区别是VS中的颜色不同: 字符串为绿色,字符串为蓝色.
中学
中学
404 *** 626@qq.com
参考地址
2年前(2018-02-26)
#5

白色代码
dre *** w@qq.com
参考地址
值类型的特征
白色代码
白色代码
dre *** w@qq.com
参考地址
2年前(2018-03-05)
#4
祈祷
117 *** 7443@qq.com
每个值类型都有一个单独的存储区来保存自己的值. 调用它时,将调用它的值,并且引用类型调用内存中的地址,例如定义引用类型a1 =10. 此时10被存储在内存中. 将a1分配给a2时,它们都使用相同的存储空间. a2的值将另存为a1的值. 当a2更改为20时,它应该是a1. 它与a2相同,因此a1也变为20. 这是一个引用类型. 将a1分配给a2时,值类型将为a2打开一个新空间以保存a1的值. 将a2更改为20时,将在a2的空间中保存20,这与a1无关.
祈祷
117 *** 7443@qq.com
2年前(2018-03-12)
#3

例外
Exc *** ion@qq.cn
像仓库一样,仓库中有一些货架,货架上的编号为: A1,A2,A3 .........,这些编号可以视为参考类型,现在有一批货物,有“土豆,黄瓜,西红柿”,它们是值类型,如果您希望A1 =土豆,则必须将土豆移至A1,这称为装箱,包装装箱需要人工和工时(即CPU和内存消耗). 同样,拆箱需要将相应数量的商品移出. 它还需要人工和工时.
例外
Exc *** ion@qq.cn
2年前(2018-04-26)
#2
关于值类型,引用类型以及“堆栈”和“堆”之间的关系
值类型. 声明值类型时,将在“堆栈”中创建一个存储空间来存储相应的值. 更改值类型值时,将直接修改存储在存储空间中的值. 示例:
int n1 = 5; int n2 = n1; Console.WriteLine(n1 + " "+ n2); // 5 5 n2 = 7; Console.WriteLine(n1 + " " + n2) // 5 7
首先在“堆栈”中打开一个存储空间以存储n1 5的值,然后在“堆栈”中打开一个新的存储空间以存储n2 5的值,因此显示的结果为55. 然后将“堆栈”中n2的相应存储空间的值修改为7,因此显示的结果为5 7.
引用类型. 声明引用类型时,首先在“堆”中打开一个存储空间以存储相应的值,然后在“堆栈”中打开一个存储空间以保存“打开”存储空间的地址. 当系统调用引用类型时获取类型c#,首先进入“堆栈”获取地址,然后根据该地址在“堆”中查找对应的存储空间,以获取对应的值. 引用类型,例如数组
string[] a1 = new string[]{ "a" , "b" , "c" };
string[] a2 = a1;
for(int i = 0; i < a2.Length; i++)
{
Console.Write(a2[i] + " "); //a b c
}
a1[2] = "d";
Console.WriteLine(); //换行
for(int i = 0; i < a2.Length; i++)
{
Console.Write(a2[i] + " "); //a b d
}
Console.WriteLine();
首先,在“堆”中打开一个存储空间(假设: 0X55)以存储数组a1的值,然后在“堆栈”中打开一个存储空间(a1)以存储地址0X55. 如果将a1分配给a2,则将地址分配给a2,也就是说,在“堆栈”中创建了一个存储空间(a2),用于存储地址0X55,因此输出a2的值为a b c. 当a1 [2]更改为“ d”时,将修改存储在“堆”中0X55存储空间中的值. 由于a2的地址与a1的地址相同,因此输出为a b d.
字符串是一种特殊的引用类型,首先看下面的代码:
string a = "123"; string b = a; Console.WriteLine(a+" "+b); //123 123 string b = "456"; Console.WriteLine(a+" "+b); //123 456
类似于数组,这里首先在“堆”中打开一个存储空间(假设: 0X88)以保存值123,然后在“堆栈”中打开一个存储空间(a)以保存地址0X88.

与数组不同,将a分配给b时,将首先在“堆”中为值123创建一个新的存储空间(假定: 0X101),然后在“堆栈”中创建一个新的存储空间. 内存空间(b)用于存储地址0X101获取类型c#,因此输出结果为123 123.
修改b的值时,而不是修改“堆”中的0X101存储空间的值,而是在“堆”中重新打开一个新的存储空间(假设: 0X210)以保存b的修改后的值. 然后将“堆栈”中与b对应的内存空间的已保存地址更改为0X210,因此输出为123456. “堆”中的0X101内存空间将在下一个垃圾回收中回收.
王峰
王峰
185 *** 439@qq.com
2年前(2018-05-24)
#1
徐小英
435 *** 632@qq.com
值类型与引用类型之间的区别:
从内存的角度来看,值类型是堆栈上的操作,而引用类型是堆上的操作.
(原因=>快速访问值类型,慢速访问引用类型. )
实质上,值类型代表实际数据,引用类型代表对存储在内存堆中的数据的指针或引用.
(值类型是特定值所占用的空间量,引用类型是该值所存储的空间的地址. )
从源头来看,值类型是从System.ValueType继承的,而引用类型是从System.Object继承的.
特定: 结构是值类型,而类和字符串是引用类型.
将值类型转换为对象类型时,称为装箱;另一方面,将对象类型转换为值类型时,称为拆箱.
动态类型与对象类型类似,但是对象类型变量的类型检查在编译时进行,而动态类型变量的类型检查在运行时进行.
徐小英
435 *** 632@qq.com
1周前(03-18)
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-154656-1.html
出来混迟早要还的