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

 我来答
醉酒银虫
2015-01-23 · TA获得超过339个赞
知道小有建树答主
回答量:235
采纳率:0%
帮助的人:258万
展开全部

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

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这样的,就能看出来了,如果复制的对象的这个值也变了,说明是浅表复制。如果不变,那就是深层的。
wmw3166
推荐于2016-03-02 · 超过10用户采纳过TA的回答
知道答主
回答量:53
采纳率:0%
帮助的人:14.8万
展开全部
那个是引用类型和值类型

值类型就是定义一个变量,要用的时候可以直接调用,从定义的时候就占用内存了
引用类型就定义一个变量,不占用内存,要用的时候需要给分配内存,才能使用
追问
怎么叫给分配内存,是实例化还是什么呢
追答
就是需要实例化,给你个具体的网址去看看详细的介绍吧http://www.cnblogs.com/Autumoon/archive/2008/08/18/1270685.html
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式