using System;
using System.Collections.Generic;
using System.Text;namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Food f = new Food();
f.X = 4;
Console.WriteLine(f.X.ToString());//输出4
Program p = new Program();
p.Change(f);//想新生成一个实例
Console.WriteLine(f.X.ToString());//输出4,没有改变
Console.Read();
}
void Change(Food f)
{
f = new Food();
f.X = 666;
}
}
class Food
{
public int X { get; set; }
}
}
ref我知道,但是
我觉得new的时候应该产生一个新的实例,然后f的地址也是指向新的,怎么访问到的还是旧的实例呢?
解决方案 »
- 新人关于UDP编程的疑问,请大家指教!
- 再求一正则表达式(高手)
- 求助 C#数据备份与还原问题
- ObjectDataSoruce 的 selecting 方法中的参数问题。。(急。。。高手帮忙)
- 安装了vs.net2008后是否还需要安装vs.net2003与vs.net2005
- 数据库中读出来的值的类型的问题。急!!!
- 怎么让窗体半透明,而控件不透明
- 为什么获取不到源码呢?
- 救命啊!安装.net接近100%时出错!下面是日志(errorlog):
- 如何把两个TextBox内输入的数字经过数学运算的结果赋給另一个TextBox
- C#安装部署中,如何自定义自己的窗口?
- 如何使用网上现成的C#自动更新
{
f = new Food();这里只是更改了行参f的引用,跟实参f没有关系
void Change(Food f)
{
f = new Food();这里的f变量指向了另一个对象,但是原来的f变量并没有改变对象地址
void Change(Food f)
{
f.X = 666;
}
{
f = new Food();<------------此f非彼f,这里的f实际是一个副本
f.X = 666;
}
using System.Collections.Generic;
using System.Text;namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Food f = new Food();
f.X = 4;
Console.WriteLine(f.X.ToString());//输出4
Program p = new Program();
p.Change(ref f);//想新生成一个实例
Console.WriteLine(f.X.ToString());//输出4,没有改变
Console.Read();
}
void Change(ref Food f)
{
f = new Food();
f.X = 666;
}
}
class Food
{
public int X;
}
}
而Change方法中的f是f1的一个副本,暂时称为f2,它和f1都维持对B1的引用
然后f=new Food();
使得在托管堆上创建了新的内存空间,称为B2
也就是说f2指向B2
但f1仍然指向B1
这样写的话,由于f1与f2都指向B1,所以f2对B1所做的修改,f1也会修改