站长网_站长创业_站长主页_站长之家_易采站长站

会员投稿 投稿指南 站长资讯通告: asp.net(C#)函数对象参数传递的问题
搜索:
您的位置: 主页 > 教程 > 网页编程 > ASP.NET > » 正文

asp.net(C#)函数对象参数传递的问题

来源: 易采站长站
代码如下:
class Program
{
static void Main(string[] args)
{
TestClass objA = new TestClass();
objA.Name = "I am ObjA";

Console.WriteLine(String.Format("In Main:{0}", objA.Name));

TestFun(objA);

Console.WriteLine(String.Format("In Main:{0}", objA.Name));

Console.Read();
}

static void TestFun(TestClass obj)
{
obj.Name = "I am be modified in TestFun";
Console.WriteLine(String.Format("In TestFun:{0}", obj.Name));
}

public class TestClass
{
public string Name { get; set; }
}
}

将对象objA作为参数传递给函数TestFun,这时传递的是对象objA的引用,所以在函数内对objA的修改会直接应用到这个对象本身。在函数TestFun内修改了形参obj的Name属性,所以在Main中再调用objA.Name时这个属性值就变为在TestFun中修改后的值了。这一点很好理解,运行结果也就是:
image
如果我们换一种写法:
代码如下:
class Program
{
static void Main(string[] args)
{
TestClass objA = new TestClass();
objA.Name = "I am ObjA";

Console.WriteLine(String.Format("In Main:{0}", objA.Name));

TestFun(objA);

Console.WriteLine(String.Format("In Main:{0}", objA.Name));

Console.Read();
}

static void TestFun(TestClass obj)
{
TestClass objB = new TestClass();
obj = objB;
obj.Name = "I am ObjB";
Console.WriteLine(String.Format("In TestFun:{0}", obj.Name));
}

public class TestClass
{
public string Name { get; set; }
}
}

那结果又将如何呢? 在TestFun中新创建了一个对象objB,接着将obj指向新创建的对象objB并对其的Name属性赋值,所以在TestFun函数体里Console.WriteLine的时候obj.Name应该是“I am ObjB”。那在Main里调用了TestFun(objA)后objA指向的对象到底做了改变没有,它仍旧指向原来的对象还是已经指向了在TestFun里创建的objB呢?

我的猜测是这样的,将objA传递给TestFun传递的实际是objA的地址,在调用TestFun之前的对应关系是:
image
objA是个变量,他本身的地址是000001,它存放的是objA对象的地址00E001。当调用函数TestFun(objA)时,由于要将objA作为参数传递给TestFun,所以在
栈中就复制一个objA地址的副本,这个副本的地址为000003,他存放的仍旧是objA对象的地址00E001,如图:
image
Tags:
最新图文资讯
1 2 3 4 5 6
相关文章列表:
易采站长站 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助 -