using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace learn
{
class Program
{
static void Main(string[] args)
{
student[] ar = new student[10]; //数组 元素是引用类型
List<student> sb = new List<student>(); //student结构 值类型
List<cstudent> csb = new List<cstudent>(); //cstudent类 引用类型
//为数组元素赋值,ar[0]实际为一个stutent结构的一个实例对象,(个人理解:结构并不分配内存,但是数组在初始化时会为元素分配内存地址)
ar[0].name = "aaa";
//List中加入一个结构体副本,值类型的NEW并不分配内存
sb.Add(new student { name = "aaaa" });
//报错,这里的sb[0]返回的是一个"副本",是这一student结构体在这一位置的副本,赋值并不改变这一位置student的值
//sb[0].name = "bbbb";
//将副本复制给其它变量,改变该变量的值
var tb = sb[0];
tb.name = "www";
for (int i = 0; i < sb.Count; i++)
{
//输出aaaa,实际上并不能改变sb[0]的值
Console.WriteLine(sb[i].name);
}
//List中加入一个对象
csb.Add(new cstudent { name = "aaaa" });
for(int i = 0; i < csb.Count; i++)
{
//因为cstudent为实体类,这里的csb[0]代表的是cstudent类的一个实例对象
csb[0].name = "a2a2a2";
//输出为a2a2a2
Console.WriteLine(csb[i].name);
}
Console.Read();
}
}
public struct student
{
public string name;
public string sex;
}
public class cstudent
{
public string name;
public string sex;
}
}
引用类型和值类型在数组、LIST中的分析
最新推荐文章于 2021-05-18 11:14:57 发布