C#传入基本类型和引用类型的区别,ref 有事怎样使用的?????
解决方案 »
- 在程序如何实现类似于51job上选择地区那样的功能效果?
- 设置粗体斜体下划线
- C#开发ActiveX打印控件
- 想用C#正则替换<%=Filename%>中替换Filename为其它怎么写?
- c#2003 单实例问题
- 服务端怎么样保存客户端页面,以邮件附件的形式发送出去
- 请问c#能否根据文件扩展名利用windows的映射自动选择打开程序?
- 请问C#里面有没有ComboBox触发(Change)事件!!
- C# listview 如何将某一列隐藏,不让用户看到?
- 高手解决System.ArgumentException: Parameter is not valid问题
- C#中,类继承时,static字段和static方法是否被继承??
- datagridview如何设置列名居中,而每行cell中从左对齐
你将下面两种测试方法看下运行结果 在看解释 就会理解了
//测试一
static void Method(ref string s)
{
s = "changed";
}
static void Main()
{
string str = "original";
Method(ref str);
Console.WriteLine(str);
}//测试二
static void Method(ref string s)
{
s = "changed";
}
static void Main()
{
string str = "original";
Method(str);
Console.WriteLine(str);
}
{
i = 3;
}
void foo2(ref int i)
{
i = 3;
}Main()
{
int x = 10;
int y = 10;
foo1(x);
foo2(ref y);
Console.WriteLine("{0}, {1}", x, y);
}
out参数也是这样,不过ref参数要先初始化才能用。
引用传递所为值传递就是值在传如果你定义一个int a=5你传来传去,把5折腾来折腾去,最后你打印输出a发现还是5
这个时候你就用到ref,这样认为是在改变变量本身int a=5
method(){a=10}
输出 a 还是5int a=5
method(ref a){a=10}
输出a 是10
引用传递ref 是你带进去的值类型引用完后会变化
{
public static void HexStringToBytes(ref byte[] buf, ref int len, string hexStr)
{
int i; for (i = 0; i < hexStr.Length / 2; i++)
{
buf[i] = Convert.ToByte(hexStr.Substring(i * 2, 2), 16);
} len = i;
}
}byte[] bytesa = new byte[1024];
string str="313203";
OX.HexStringToBytes(ref bytesa, ref p.len, str);
foreach (var b in bytesa)
{
Console.Write("[{0}]", b);
}
//看到了吧,这里的ref bytesa,直接操作bytesa,里面已经有值了
C# 关键字 | 方法参数
方法参数上的 ref 方法参数关键字使方法引用传递到方法的同一个变量。当控制传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。若要使用 ref 参数,必须将参数作为 ref 参数显式传递到方法。ref 参数的值被传递到 ref 参数。传递到 ref 参数的参数必须最先初始化。将此方法与 out 参数相比,后者的参数在传递到 out 参数之前不必显式初始化。属性不是变量,不能作为 ref 参数传递。如果两种方法的声明仅在它们对 ref 的使用方面不同,则将出现重载。但是,无法定义仅在 ref 和 out 方面不同的重载。例如,以下重载声明是有效的:class MyClass
{
public void MyMethod(int i) {i = 10;}
public void MyMethod(ref int i) {i = 10;}
}
但以下重载声明是无效的:class MyClass
{
public void MyMethod(out int i) {i = 10;}
public void MyMethod(ref int i) {i = 10;}
}
有关传递数组的信息,请参见使用 ref 和 out 传递数组。http://hi.baidu.com/328313266/blog/item/b8a364ca396b7e19be09e6fa.html
引用类型 传的是真本,他也没有印副本,所以只有一本,相当于指针,指是的一个地址,
ref 就是让基本类型按照引用类型的方式来传比如你去一公司面试,有的就要求你带毕业证的原本(不是原本还不行,这时候你只能带原本了,就是按引用类型的方式去给公司,它们才相信你是那个大学毕业的(因为是毕业证看完后,他肯定还给你,实际程序里这个毕业证被程序处理后就变成另一种东西了,你愿意吗?))这就是对参数本身操作有的公司就可以不看原本,你只要给个副本它看一下就可以了,这时候你不用搞真本,你到复印店复一份给公司就行了,将来这份不会造成你的原本丢失呀,等等问题,