天天看點

params,out和ref的關鍵字差別

(一)params---------可以讓參數随意變化的關鍵字

1 staticvoid Main(string[] args)

2 {

3 TestParams(1, 2, 3);

4 TestParams(1, 2, 3, 4, 5, 6);//注意參數随意變換

5

6 TestParams2(1, "a", "b", 12, 52, 16);

7

8 Console.ReadLine();

9 }

10

11 staticvoid TestParams(paramsint[] list)

12 {

13 string str =string.Empty;

14 for (int i =0; i < list.Length; i++)

15 {

16 str = str + list[i] +";";

17 }

18 Console.WriteLine(str);

19 }

20

21 staticvoid TestParams2(paramsobject[] list)

22 {

23 string str =string.Empty;

24 for (int i =0; i < list.Length; i++)

25 {

26 str = str + list[i] +";";

27 }

28 Console.WriteLine(str);

29 }

(二)out------一個引用傳遞

   因為傳遞的不是值,而是引用,是以對out參數做的任何修改都會反映在該變量當中

static void Main(string[] args)
        {
            string str;    //str不必初始化,因為str進入方法後,會清掉自己,使自己變成一個幹淨的參數,

              //也因為這個原因,在從方法傳回前,必須給str指派,否則會報錯。

            TestOutPar(out str);

            Console.WriteLine(str);
            Console.ReadLine();
        }

        static void TestOutPar(out string str)
        {
            str = "hello!";
        }
      

    結果顯示:"hello!"

       如果在TestOutPar方法裡注釋掉 //str = "hello!";那麼程式會報錯

  

params,out和ref的關鍵字差別

  用途:

  當希望一個方法能夠傳回多個值時,這個out就變得非常有用。比如在分頁方法中,我們需要傳回目前頁,頁數等等資料。

3 int pageCount;

4 int pageSize;

5 string result=TestOutPar(out pageCount, out pageSize);

6

7 Console.WriteLine(pageCount);

8 Console.WriteLine(pageSize);

9 Console.WriteLine(result);

10 Console.ReadLine();

11 }

12

13 staticstring TestOutPar(outint pageCount, outint pageSize)

14 {

15 pageCount =100;

16 pageSize =12;

17 return"hello!";

18 }

19

20   結果顯示:100,12,hello!

(三)ref-----------僅僅是一個位址

3 int value =10;//必須初始化,因為value進入方法後還是他自己,也因為這個原因,value可以在方法内不操作

4 TestRefPar(ref value);

5 Console.WriteLine(value);

6 Console.ReadLine();

7 }

8

9 staticstring TestRefPar(refint value)

10 {

11 //value = 100;  //value在方法内不操作

12 return"hello!";

13 }

繼續閱讀