各位,在c#中,什么是引用字段什么是值字段啊
2个回答
展开全部
这个是为了让你明白什么叫浅表复本。
class Content
{
public int val;
}
class Cloner
{
public Content con = new Content();
public int val;
public Cloner(int newValue)
{
con.val = newValue;
val = newValue;
}
public object GetCopy()
{
return MemberwiseClone();
}
public static void Main()
{
Cloner cloner1 = new Cloner(123);
Cloner cloner2 = cloner1.GetCopy() as Cloner;
cloner1.con.val = 1;
cloner1.val = 1;
Console.WriteLine("cloner1.con.val:{0}",cloner1.con.val);
Console.WriteLine("cloner2.con.val:{0}",cloner2.con.val);
Console.WriteLine("cloner1.val:{0}", cloner1.val);
Console.WriteLine("cloner2.val:{0}", cloner2.val);
Console.ReadKey();
}
}
这个输出结果表明,复杂类型的con只是引用被复制了,而对于值类型的val,值被复制了。
因此,更改cloner1.con.val的时候,cloner2.con.val的值也会变。
而cloner1.val被更改的时候,cloner2.val不受影响。
简而言之,就是说,只有第一层的值会被复制,就是简单的类型的字段,比如字符串,数字,结构体这些,这样,它们互相之间就没有关系了,更改这个不会影响到另一个。而复杂类型,带两个.的,它的值就不会被复制了,因此互相之间还是有关系的。
更多追问追答
追问
那我怎么知道哪个是深度复制哪个是浅度复制呢
追答
C#没有深度复制,要想有,就得自己实现。所以一般都是浅表复制,如果要判断,就修改一个深层的,比如cloner1.con.val这样的,就能看出来了,如果复制的对象的这个值也变了,说明是浅表复制。如果不变,那就是深层的。
展开全部
那个是引用类型和值类型
值类型就是定义一个变量,要用的时候可以直接调用,从定义的时候就占用内存了
引用类型就定义一个变量,不占用内存,要用的时候需要给分配内存,才能使用
值类型就是定义一个变量,要用的时候可以直接调用,从定义的时候就占用内存了
引用类型就定义一个变量,不占用内存,要用的时候需要给分配内存,才能使用
追问
怎么叫给分配内存,是实例化还是什么呢
追答
就是需要实例化,给你个具体的网址去看看详细的介绍吧http://www.cnblogs.com/Autumoon/archive/2008/08/18/1270685.html
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询