1.out参数的用法。
usingSystem;
classTestOut

...{
staticpublicvoidFillArray(outint[]myArray)

...{
//初始化数组(必须):

myArray=newint[5]...{1,2,3,4,5};
}

staticpublicvoidMain()

...{
int[]myArray;//初始化数组(不是必须的!)

//传递数组给(使用out方式的)调用方:
FillArray(outmyArray);

//显示数组元素
Console.WriteLine("数组元素是:");
for(inti=0;i<myArray.Length;i++)
Console.WriteLine(myArray[i]);
}
}
2.ref参数的基本用法,相当于c里面的指针。
usingSystem;
classTestRef

...{
publicstaticvoidFillArray(refint[]arr)

...{
//根据需要创建一新的数组(不是必须的)
if(arr==null)
arr=newint[10];
//否则填充数组,就可以了
arr[0]=123;
arr[4]=1024;
}

staticpublicvoidMain()

...{
//初始化数组:

int[]myArray=...{1,2,3,4,5};

//使用ref传递数组:
FillArray(refmyArray);

//显示更新后的数组元素:
Console.WriteLine("数组元素是:");
for(inti=0;i<myArray.Length;i++)
Console.WriteLine(myArray[i]);
}
}
3.有ref与无ref的比较。
usingSystem;
publicclassMyClass

...{
publicstaticvoidTestRef(refchari)

...{
//Thevalueofiwillbechangedinthecallingmethod
i='b';
}

publicstaticvoidTestNoRef(chari)

...{
//Thevalueofiwillbeunchangedinthecallingmethod
i='c';
}



//Thismethodpassesavariableasarefparameter;thevalueofthe
//variableischangedaftercontrolpassesbacktothismethod.
//Thesamevariableispassedasavalueparameter;thevalueofthe
//variableisunchangedaftercontrolispassedbacktothismethod.
publicstaticvoidMain()

...{
chari='a';//variablemustbeinitialized
TestRef(refi);//theargmustbepassedasref
Console.WriteLine(i);
i='a';
TestNoRef(i);
Console.WriteLine(i);

}
}
4.此处应用了类,注意类是引用类型,直接进行引用,除非在函数内生成新的类。
usingSystem;
//----------------------------------------
//MyClassdefinition
publicclassMyClass

...{
publicintValue;



//----------------------------------------
//Testermethods
publicstaticvoidTestRef(refMyClassm)

...{
m.Value=10;
}

publicstaticvoidTestNoRef(MyClassm)

...{
m.Value=20;
}

publicstaticvoidTestCreateRef(refMyClassm)

...{
m=newMyClass();
m.Value=100;
}

publicstaticvoidTestCreateNoRef(MyClassm)

...{
m=newMyClass();
m.Value=200;
}

publicstaticvoidMain()

...{
MyClassm=newMyClass();
m.Value=1;

TestRef(refm);
Console.WriteLine(m.Value);

TestNoRef(m);
Console.WriteLine(m.Value);

TestCreateRef(refm);
Console.WriteLine(m.Value);

TestCreateNoRef(m);
Console.WriteLine(m.Value);
}
}
5.ref,out,与无参参数的比较。
usingSystem;
classTestApp

...{
staticvoidoutTest(outintx,outinty)

...{//离开这个函数前,必须对x和y赋值,否则会报错。
//y=x;
//上面这行会报错,因为使用了out后,x和y都清空了,需要重新赋值,即使调用函数前赋过值也不行
x=1;
y=2;
}
staticvoidrefTest(refintx,refinty)

...{
x=1;
y=x;
}


staticvoidnoRefTest(intx,inty)

...{
x=8;
y=x;
}



publicstaticvoidMain()

...{
//outtest
inta,b;
//out使用前,变量可以不赋值
outTest(outa,outb);
Console.WriteLine("a={0};b={1}",a,b);
intc=11,d=22;
outTest(outc,outd);
Console.WriteLine("c={0};d={1}",c,d);

//reftest
//intm,n;
//refTest(refm,refn);
//上面这行会出错,ref使用前,变量必须赋值

into=11,p=22;
refTest(refo,refp);
Console.WriteLine("o={0};p={1}",o,p);

intli=99,zong=89;
noRefTest(li,zong);
Console.WriteLine("{0},{1}",li,zong);



}
}


























2.ref参数的基本用法,相当于c里面的指针。
































3.有ref与无ref的比较。




































4.此处应用了类,注意类是引用类型,直接进行引用,除非在函数内生成新的类。

























































5.ref,out,与无参参数的比较。

























































