Bre*_*ogt 6 .net c# reference-type indirection
我正在阅读c#数组,所以我的问题最初是在数组上.
声明数组实际意味着什么?我知道你声明了一个类型为array的变量.当我有以下内容时,实际发生了什么?
int[] values;
Run Code Online (Sandbox Code Playgroud)
声明时它是否在记忆中?如果不是那么它在哪里?阵列实际上是在这里创建的吗?
然后我去实例化一个数组并用一些值初始化它,如:
int[] values = new int[] { 1, 2, 3 };
Run Code Online (Sandbox Code Playgroud)
这实际上是现在创建阵列吗?我已阅读,创建数组在声明时,别人说自己被实例化时创建数组.我想让我的术语正确.
整数变量也是如此.如果我有:
int value;
Run Code Online (Sandbox Code Playgroud)
和
int value = 1;
Run Code Online (Sandbox Code Playgroud)
什么时候创建int?什么时候加入内存?
抱歉愚蠢的问题.我理解这个概念,但想知道阵列的幕后technicallity.
声明数组实际意味着什么?
你没有实际声明一个数组,你声明了一个数组引用.在.NET中很重要,引用类型和值类型之间的区别很重要.仅仅使用数组引用变量是不够的,创建数组对象需要额外的步骤.这需要新的关键字.在物理上为存储引用类型对象的地方(垃圾收集堆)分配数组对象的存储.
整数变量也是如此
不,差别很大.这是一种价值类型.如果它不是一个类的字段,从你的问题中没有那么清楚,那么它是一个方法的局部变量.它在方法开始运行时创建,并且在方法返回时伪装不存在.高度优化,是C#中存在值类型的核心原因.如果方法使用太多局部变量,则物理存储位置通常是cpu寄存器或堆栈帧上的插槽.
如果它实际上是类的成员,则在创建类对象时创建它.就像一个数组一样,在GC堆上使用new关键字.