今天研究As3中发现可以利用引用改变private关键字声明的变理,用C#试验了一下,发现也可以!拿出来跟大家分享一下!
先看看代码:
using
System;
using System.Collections.Generic;
using System.Text;
using System.IO;
namespace file1
... {
class Program
...{
static void Main(string[] args)
...{
List<string> arr = new List<string>();
arr.Add("a");
SampleFoo foo = new SampleFoo(arr);
Console.WriteLine(foo.pSample.getList());
arr.Add("b");
Console.WriteLine(foo.pSample.getList());
}
}
}
// 试例类
public class SampleFoo
... {
private List<string> array;
public PrivateSample pSample;
public SampleFoo(List<string> a1)
...{
array = a1;
pSample = new PrivateSample(array);
}
}
// 被测试的类
public class PrivateSample
... {
private List<string> barr;
public PrivateSample(List<string> ba)
...{
barr = ba;
}
public string getList()
...{
StringBuilder sb =new StringBuilder();
foreach (string s in barr)
...{
sb.Append(s+",");
}
return sb.ToString();
}
}
using System.Collections.Generic;
using System.Text;
using System.IO;
namespace file1
... {
class Program
...{
static void Main(string[] args)
...{
List<string> arr = new List<string>();
arr.Add("a");
SampleFoo foo = new SampleFoo(arr);
Console.WriteLine(foo.pSample.getList());
arr.Add("b");
Console.WriteLine(foo.pSample.getList());
}
}
}
// 试例类
public class SampleFoo
... {
private List<string> array;
public PrivateSample pSample;
public SampleFoo(List<string> a1)
...{
array = a1;
pSample = new PrivateSample(array);
}
}
// 被测试的类
public class PrivateSample
... {
private List<string> barr;
public PrivateSample(List<string> ba)
...{
barr = ba;
}
public string getList()
...{
StringBuilder sb =new StringBuilder();
foreach (string s in barr)
...{
sb.Append(s+",");
}
return sb.ToString();
}
}
上例中我们可以看到,声明SampleFoo类的一个实例时,构造函数代入了一个数组变理,并将其赋值给PrivateSample类型的变量pSample,并将数组array以构造传递给pSample,这时大家要注意一下,这时
我们并不是将值传递,而是将引用传递,此时不论是foo,还是foo的私有变量pSample,还是pSample
的私有变量barr都是指向的同一个引用,及同一个内存地址。
这时我们可以看到,当将arr数组添加新的元素时,也同时改变了pSample的私有变量barr的值,这也可以
充分的看出,对对象的操作实际上是对引用的操作,这一点一定要注意!