根据参数类型和传递方式,有以下4种不同的情况:
值类型参数的按值传递; (int m)
引用类型参数的按值(地址值)传递; (string str)
值类型参数的按引用传递; (ref int m)
引用类型参数的按引用传递; (ref string str)
值类型与引用类型参数
class
Demo
{
static void Main( string [] args)
{
int n = 100 ;
string str = " One " ;
ChangeByValue( ref n); // 值类型:ref 传递的是变量 n 的地址(即:值类型的地址)
ChangeByRef( ref str); // 引用类型:ref 传递的是变量 str 的地址(即:引用的引用)
Console.WriteLine(n);
Console.WriteLine(str);
}
private static void ChangeByValue( ref int m)
{
m = 200 ; // 实际上改变的是变量 n 的值
}
private static void ChangeByRef( ref string s)
{
s = " Two " ;
}
// 通过,参数带ref(或out),与不带ref(或out)的方法能实现方法的重载
private static void ChangeByRef( string s)
{
s = " Two " ;
}
// 报错:不能定义仅在 ref 和 out 上有差别的重载方法。
// 原因:在MSIL中, ref 和 out 是同一类型。
/* private static void ChangeByRef(out string s)
{
s = "Two";
}
*/
}
{
static void Main( string [] args)
{
int n = 100 ;
string str = " One " ;
ChangeByValue( ref n); // 值类型:ref 传递的是变量 n 的地址(即:值类型的地址)
ChangeByRef( ref str); // 引用类型:ref 传递的是变量 str 的地址(即:引用的引用)
Console.WriteLine(n);
Console.WriteLine(str);
}
private static void ChangeByValue( ref int m)
{
m = 200 ; // 实际上改变的是变量 n 的值
}
private static void ChangeByRef( ref string s)
{
s = " Two " ;
}
// 通过,参数带ref(或out),与不带ref(或out)的方法能实现方法的重载
private static void ChangeByRef( string s)
{
s = " Two " ;
}
// 报错:不能定义仅在 ref 和 out 上有差别的重载方法。
// 原因:在MSIL中, ref 和 out 是同一类型。
/* private static void ChangeByRef(out string s)
{
s = "Two";
}
*/
}
本文转自钢钢博客园博客,原文链接http://www.cnblogs.com/xugang/archive/2010/04/15/1712845.html