各位,在c#中,什么是引用字段什么是值字段啊

如题所述

这个是为了让你明白什么叫浅表复本。

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这样的,就能看出来了,如果复制的对象的这个值也变了,说明是浅表复制。如果不变,那就是深层的。

追问

大哥能再给我看看这个this是调用谁的吗

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2016-03-02
那个是引用类型和值类型

值类型就是定义一个变量,要用的时候可以直接调用,从定义的时候就占用内存了
引用类型就定义一个变量,不占用内存,要用的时候需要给分配内存,才能使用追问

怎么叫给分配内存,是实例化还是什么呢

追答

就是需要实例化,给你个具体的网址去看看详细的介绍吧http://www.cnblogs.com/Autumoon/archive/2008/08/18/1270685.html

本回答被提问者采纳
相似回答