关于c#中按引用传递对象的一点疑惑
记得《C#经典入门(第5版)》中提到过:除了值类型的对象,其他对象都是按引用传递。
所以在下面的例子中,Init()执行完后,aaa新增了一个元素1.
- C# code
class test1{ public test1() { var aaa = new List<int>(); Init(aaa); } private void Init(List<int> zzz) { zzz.Add(1); }}
引起我困惑的主要是下面两个例子,Init()执行完后,aaa没有变化.
- C# code
class test2{ public test2() { List<int> aaa = null; Init(aaa); } private void Init(List<int> zzz) { zzz = new List<int>(); }}
- C# code
class test3{ public test3() { List<int> aaa = new List<int>(); aaa.Add(1); Init(aaa); } private void Init(List<int> zzz) { zzz = new List<int>(); zzz.Add(111); }}
但加上out或ref之后,Init()执行完后,aaa会发生改变.
- C# code
class test4{ public test4() { List<int> aaa = null; Init(out aaa); } private void Init(out List<int> zzz) { zzz = new List<int>(); }}
最后,我的问题是:为什么test2和test3中aaa没有发生变化?
谢谢您耐心看完我的问题,期待您的解答。
[解决办法]
先看这篇吧
上面那个放这个后面看