1. 程式人生 > >C#利用型別引用改變private型別變數的值

C#利用型別引用改變private型別變數的值

今天研究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;
    
public SampleFoo(List<string> a1)
    
{
        array 
= a1;
        pSample 
=new PrivateSample(array);
    }

}


//被測試的類
publicclass PrivateSample
{
    
private List<string> barr;
    
public PrivateSample(List<string> ba)
    
{
        barr 
= ba;
    }

    
publicstring 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的值,這也可以

充分的看出,對物件的操作實際上是對引用的操作,這一點一定要注意!