首頁 > 後端開發 > C#.Net教程 > C#難點逐一擊破(1):ref參數傳遞

C#難點逐一擊破(1):ref參數傳遞

黄舟
發布: 2016-12-22 14:02:40
原創
1785 人瀏覽過

一般情況,方法的參數傳遞是透過值進行傳遞的,即一個物件作為參數傳遞給方法使用,該物件便進駐到該參數物件所在指標的記憶體空間(使用C來描述),也就是該物件在此位置創建了副本,當方法運行結束時,該副本將會被銷毀;這種傳遞方式的使用佔據了日常方法傳參的絕大多數。

另一種情況是引用傳遞,它與值傳遞方式不同,物件傳遞給方法時對方法參數並沒有影響,仍然傳回的是受原始參數取值影響的方法,也就是MethodInstance(ref _refValue)呼叫Method (ref _arg)方法,但_refValue對Method無影響,回傳的仍是_arg影響的結果。這一點也能想到_arg必須在使用前賦值。

範例: 

另一個情況是引用傳遞,它與值傳遞方式不同,物件傳遞給方法時對方法參數並沒有影響,仍然傳回的是受原始參數取值影響的方法,即MethodInstance(ref _refValue)呼叫Method(ref _arg)方法,但_refValue對Method無影響,傳回的仍是_arg影響的結果。這一點也能想到_arg必須在使用前賦值。

範例: 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

using System;

 

/******************************

* Chapter:C#难点逐个击破(一)

* Author:王洪剑

* Date:2010-1-11

* Blog:http://www.51obj.cn/

* Email:walkingp@126.com

* Description:重点讲解值传递方式与引用传递方式

* ***************************/

namespace Wang.TestRef

{

public class NormalClass

{

public void ShowNormalResult(string name)

{

name = "Wang Hongjian";

Console.WriteLine(name);

}

}

public class RefClass

{

/// <summary>

/// 引用类型ref类

/// </summary>

/// <param name="name"></param>

public void ShowRefResult(ref string name)

{

name = "Wang Hongjian";

Console.WriteLine(name);

}

}

class Program

{

static void Main(string[] args)

{

string _name = "Zhou Runfa";//传递参数

 

#region 值传递参数方式

NormalClass n = new NormalClass();

n.ShowNormalResult(_name);//正常调用

#endregion

 

#region 引用传递参数方式

RefClass o = new RefClass();

o.ShowRefResult(ref _name);//结果仍然为引用传递参数

Console.ReadKey();

#endregion

}

}

}

登入後複製

運作結果: 

C#難點逐一擊破(1):ref參數傳遞


 以上就是C#難點逐一擊破(1):refphp參數的內容,更多相關內容參數!


相關標籤:
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板