C#利用型別引用改變private型別變數的值
阿新 • • 發佈:2019-02-16
今天研究As3中發現可以利用引用改變private關鍵字宣告的變理,用C#試驗了一下,發現也可以!拿出來跟大家分享一下!
先看看程式碼:
using System;using System.Collections.Generic;
using System.Text;
using System.IO;
namespace file1
{
class Program
{
staticvoid 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());
}
}
}
//試例類
publicclass SampleFoo
{
private List<string> array;
public PrivateSample pSample;
{
array = a1;
pSample =new PrivateSample(array);
}
}
//被測試的類
publicclass PrivateSample
{
private List<string> barr;
public PrivateSample(List<string> ba)
{
barr = ba;
}
publicstring getList()
{
foreach (string s in barr)
{
sb.Append(s+",");
}
return sb.ToString();
}
}
上例中我們可以看到,宣告SampleFoo類的一個例項時,建構函式代入了一個數組變理,並將其賦值給PrivateSample型別的變數pSample,並將陣列array以構造傳遞給pSample,這時大家要注意一下,這時
我們並不是將值傳遞,而是將引用傳遞,此時不論是foo,還是foo的私有變數pSample,還是pSample
的私有變數barr都是指向的同一個引用,及同一個記憶體地址。
這時我們可以看到,當將arr陣列新增新的元素時,也同時改變了pSample的私有變數barr的值,這也可以
充分的看出,對物件的操作實際上是對引用的操作,這一點一定要注意!