.NET Ref
和
Out
关键字
对于值类型。
如果不使用
ref /out
则传递的只是这些值的
COPY,
使用了
Ref
和
Out
的效果就几乎和
C
中使用了指针变量一样。
(
传递的就是原值
),
它能够让你直接对原数进行操作,而不是对那个原数的
Copy
进行操作
对于引用类型
:
如果不使用
ref /out,
因为传递的是引用类型的地址值
,
则将传递引用类型的地
址值的一个
COPY(--
针对地址值的角度还是值类型传递
),
实际上就是新开一个
不同的内存变量来存储这个地址值的拷贝
而使用
ref /out,
传递的还是引用类型的地址值
,
但是传递的就不是一个新变量
来存拷贝
,
而是就是传原来的那个应用类型的地址值
/
注意
list
的处理
不用关心
,
异步
,
代理委托这些
;
可
以和使用同步方法一样理解;只是正好遇到了这个例
子所以拿来用;
public
delegate
string
DelegateWithParameters(string
param1,
int
param2,
ArrayList list);
private void CallFooWithParameters()
{
// create the paramets to pass to the function
string strParam1 = "Param1";
int intValue = 100;
ArrayList list = new ArrayList();
list.Add("Item1");
// create the delegate
DelegateWithParameters delFoo =
new DelegateWithParameters(FooWithParameters);
//
call
FooWithParameters(string
param1,int
param2,
ArrayList
list)
//
实际上
list
的引用地址作为值类型传递
,
进入方法时
,
用一个新内存变量
存储这个引用的地址
//
所以在函数内部多该新内存变量地址修改
.
只是让该新内存变量指向了另
外一个
list
IAsyncResult tag =
delFoo.BeginInvoke(strParam1, intValue, list, null, null);