请高手指点迷津~~~关于值传递和引用传递的问题! 我是一名VC#的初学者,但是对值传递和引用传递还是很头疼,自己看书啊什么的,还是比较迷茫,到网上找了些资料,按着别人的代码敲出来,一步一步的调试看结果,但是还是没转过来......希望高手能为我指点迷津(我智商没有问题~~~~)谢谢各位了!!!!!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 值类型源自System.ValueType,每个值类型的对象都有天一个独立的内存区域保存自己的值。只要在代码中修改它,就会在它的内存区域内保存这个值。引用类型源于System.Object,它存储的是对值的引用,就好比存储值的对象是一个气球,而我们的引用变量是一根线。值类型{ int long float char bool 枚举enum 结构 struck}引用类型{ 类: 基类System.Object 字符串 string 自定义类 class 接口:interface 数组:int[],string[]} 运行这个对你有帮助 ~_~!!using System;using System.Collections.Generic;using System.Text;namespace ConsoleApplication1{ class Value { public int i = 15; } class Program { public void first() { Console.WriteLine(" first()\n {"); Value v = new Value(); Console.WriteLine(" Value v = new Value(); //此时 v.i = " + v.i); v.i = 25; Console.WriteLine(" v.i = 25; //此时 v.i = " + v.i); Console.WriteLine(" second(v) //执行该方法\n"); second(v); Console.WriteLine(" //此时 v.i = " + v.i); Console.WriteLine(" second(ref v) //执行该方法\n"); second(ref v); Console.WriteLine(" //此时 v.i = " + v.i); Console.WriteLine(" }"); } public void second(Value v) { Console.WriteLine(" second(Value v)\n {"); Console.WriteLine(" //参数Value v刚进入second方法时 v.i = " + v.i); v.i = 20; Console.WriteLine(" v.i = 20; //此时 v.i = " + v.i); Value val = new Value(); Console.WriteLine(" Value val = new Value(); //此时 val.i = " + val.i); v = val; Console.WriteLine(" v = val; //此时 v.i = " + v.i); Console.WriteLine(" }"); } public void second(ref Value v) { Console.WriteLine(" second(ref Value v)\n {"); Console.WriteLine(" //参数ref Value v刚进入second方法时 v.i = " + v.i); v.i = 20; Console.WriteLine(" v.i = 20; //此时 v.i = " + v.i); Value val = new Value(); Console.WriteLine(" Value val = new Value(); //此时 val.i = " + val.i); v = val; Console.WriteLine(" v = val; //此时 v.i = " + v.i); Console.WriteLine(" }"); } public void testValue(int i) { Console.WriteLine(" testValue(int i)\n {"); Console.WriteLine(" //i= " + i); i = 10; Console.WriteLine(" i = 10; //i= " + i); Console.WriteLine(" }"); } public void testValue(ref int i) { Console.WriteLine(" testValue(ref int i)\n {"); Console.WriteLine(" //i= " + i); i = 20; Console.WriteLine(" i = 10; //i= " + i); Console.WriteLine(" }"); } static void Main(string[] args) { Console.WriteLine("下面介绍当方法的参数为 值类型 或 类实例类型 时"); Console.WriteLine("使用ref或不使用时的一些区别!"); Console.WriteLine("Main()\n{"); Program t = new Program(); Console.WriteLine(" Program t = new Program();"); Console.WriteLine(" //下面演示方法参数为 类实例类型 的传递规则"); Console.WriteLine(" t.first();─────┐\n"); t.first(); Console.WriteLine(" ──────────┘"); int i = 30; Console.WriteLine(" int i = 30; //i = " + i); Console.WriteLine(" //下面演示方法参数为 值类型 的传递规则"); Console.WriteLine(" t.testValue(i); ──┐"); t.testValue(i); Console.WriteLine(" i = " + i); Console.WriteLine(" ──────────┘"); Console.WriteLine(" t.testValue(ref i); ─┐"); t.testValue(ref i); Console.WriteLine(" i = " + i); Console.WriteLine(" ───────────┘"); Console.WriteLine("}"); Console.Read(); } }} 关于dataGridView数据重新加载后选中行问题。 在线等正则表达式 100分求助:如何让方框随着鼠标Click而移动啊? 如何实现自定义控件功能? 求高手赐教代码原理 公式验证 C# TcpClient.Connect()方法使用错误? 用c#发送邮件的问题 怎么用GDI+判断下面有几个圆环 C# new关键词做了哪几个步骤 双击窗体事件 急,连接DB问题,高分求
引用类型源于System.Object,它存储的是对值的引用,就好比存储值的对象是一个气球,而我们的引用变量是一根线。值类型
{
int long float char bool
枚举enum
结构 struck
}引用类型
{
类: 基类System.Object
字符串 string
自定义类 class
接口:interface
数组:int[],string[]
}
using System;
using System.Collections.Generic;
using System.Text;namespace ConsoleApplication1
{
class Value
{
public int i = 15;
} class Program
{ public void first()
{
Console.WriteLine(" first()\n {"); Value v = new Value();
Console.WriteLine(" Value v = new Value(); //此时 v.i = " + v.i); v.i = 25;
Console.WriteLine(" v.i = 25; //此时 v.i = " + v.i); Console.WriteLine(" second(v) //执行该方法\n");
second(v);
Console.WriteLine(" //此时 v.i = " + v.i);
Console.WriteLine(" second(ref v) //执行该方法\n");
second(ref v); Console.WriteLine(" //此时 v.i = " + v.i);
Console.WriteLine(" }");
} public void second(Value v)
{
Console.WriteLine(" second(Value v)\n {");
Console.WriteLine(" //参数Value v刚进入second方法时 v.i = " + v.i); v.i = 20;
Console.WriteLine(" v.i = 20; //此时 v.i = " + v.i); Value val = new Value();
Console.WriteLine(" Value val = new Value(); //此时 val.i = " + val.i); v = val;
Console.WriteLine(" v = val; //此时 v.i = " + v.i);
Console.WriteLine(" }");
} public void second(ref Value v)
{
Console.WriteLine(" second(ref Value v)\n {");
Console.WriteLine(" //参数ref Value v刚进入second方法时 v.i = " + v.i); v.i = 20;
Console.WriteLine(" v.i = 20; //此时 v.i = " + v.i); Value val = new Value();
Console.WriteLine(" Value val = new Value(); //此时 val.i = " + val.i); v = val;
Console.WriteLine(" v = val; //此时 v.i = " + v.i);
Console.WriteLine(" }");
} public void testValue(int i)
{
Console.WriteLine(" testValue(int i)\n {");
Console.WriteLine(" //i= " + i);
i = 10;
Console.WriteLine(" i = 10; //i= " + i);
Console.WriteLine(" }");
} public void testValue(ref int i)
{
Console.WriteLine(" testValue(ref int i)\n {");
Console.WriteLine(" //i= " + i);
i = 20;
Console.WriteLine(" i = 10; //i= " + i);
Console.WriteLine(" }");
} static void Main(string[] args)
{
Console.WriteLine("下面介绍当方法的参数为 值类型 或 类实例类型 时");
Console.WriteLine("使用ref或不使用时的一些区别!");
Console.WriteLine("Main()\n{"); Program t = new Program();
Console.WriteLine(" Program t = new Program();");
Console.WriteLine(" //下面演示方法参数为 类实例类型 的传递规则"); Console.WriteLine(" t.first();─────┐\n");
t.first();
Console.WriteLine(" ──────────┘"); int i = 30;
Console.WriteLine(" int i = 30; //i = " + i); Console.WriteLine(" //下面演示方法参数为 值类型 的传递规则"); Console.WriteLine(" t.testValue(i); ──┐");
t.testValue(i);
Console.WriteLine(" i = " + i);
Console.WriteLine(" ──────────┘"); Console.WriteLine(" t.testValue(ref i); ─┐");
t.testValue(ref i);
Console.WriteLine(" i = " + i);
Console.WriteLine(" ───────────┘"); Console.WriteLine("}");
Console.Read();
}
}
}