控件是引用类型吗?这个对象如何固定?
ListBox listbox_变化 = new ListBox();
ListBox listbox2 = listbox_变化;
由于功能需求,在程序中,变量“listbox_变化”所指向的对象随时可能变化,请问,如何保证listbox2不随着“listbox_变化”的变化而变化。
------解决方案--------------------既然这样你干嘛不直接让listbox2引用一个新的对象
------解决方案--------------------C# code
ListBox listbox_变化 = new ListBox();
ListBox listbox2 = listbox_变化;
listbox_变化 = new ListBox();//listbox_变化 变成新的,listbox2 是原来的
------解决方案--------------------
listbox2重新new一个,就行了。
------解决方案--------------------
说白了,“listbox_变化”随便赋值,“listbox2” 都不会变,但如果“listbox_变化”未重新赋值前内部的数据修改了,“listbox2”也会看到修改后的数据
------解决方案--------------------
控件是类,当然是引用类型,不随着变化那就新new一个实例呗
------解决方案--------------------
好奇怪的问题,根本就不会变化。你的问题根本就不成立。
好比
int i = 3;
int j = i;
i = 5;
j会变化么?
还引用类型。你连最基本的C#语法都没学会呢。
------解决方案--------------------
这个都是数据源的变动问题,
你控制好数据源就行了
------解决方案--------------------
------解决方案--------------------
ListBox listbox_变化 = new ListBox();
ListBox listbox2 = listbox_变化;
有些不懂,你的目的就不是让两个变量的值一样吗?
------解决方案--------------------
从堆栈看 引用和值 你会知道明显区别
主要看数据的变化和存活周期
系统并不知道你这个东西是不是长久的
默认都会分配堆上,至于接下来会根据你的调用去重新处理
------解决方案--------------------
------解决方案--------------------
引用类型1=引用类型2;
这个时候浅拷贝,引用类型1 指向的引用类型2的地址即(栈空间存放的地址)
引用类型1 =new 引用类型1();
这个时候会为这个引用类型分配一个小堆来存放数据,同时用栈空间的地址指向它
所有的值类型(非装箱过)的数据全部存放在栈空间里面
你的问题的话,有两种解决办法
ListBox listbox_变化 = new ListBox();
ListBox listbox2 = listbox_变化;
一个是做深拷贝,即递归遍历所有listbox_变化的property来赋值给listbox2
另一个办法是,
先给listbox2 赋值 listbox_变化
然后在给 listbox_变化=new ListBox();即可
2楼说的不错
------解决方案--------------------
------解决方案--------------------
读LZ的帖子好绕口!
------解决方案--------------------
用一个Statistic变量 ListBox statisticLB
在 ListBox listbox_变化 = new ListBox(); 时 statisticLB = listbox_变化, 每new一次,按照是否需要变动statisticLB的条件来修改statisticLB变量。
ListBox listbox2 直接取statisticLB变量。
或则楼主希望的是 “单例模式”?