先说我的疑问吧 事情是这样的 我在一个函数中传一个对象作为参数 ,在函数里我为形参改变了引用 指向另外一个对象 但是出了函数 实参没有改变后来我一想参数的作用域在函数体内 除了函数体就被销毁了 你改了它的引用,有什么用?再来说下我的看法: 形参和实参 是两个变量 它们指向同一个地址 但是两个变量的地址不同 修改变量的引用是修改变量的值(地址) 就跟值传递一样改了 形参的值(地址) 不能改变实参的值 (地址)问题来了, 我突然想起了用ref试试 饿 还是先把代码贴出了先
首先来定义一个类Person:
public class Person
{
private string name;
public stringName
{
set{this.name = name;}
get{return this.name;}
}
public Person(string name)
{
this.name = name;
}
}
using System;
using System.Collections.Generic;
usingSystem.Linq;
using System.Text;
namespace ConsoleApplication1{
class Program
{
static void Main(string[] args)
{
Person p = new Person("zhangsan");
change(p);
//输出的是张三 并不是李四
Console.Writeline(p.Name);
change(p,"lisi");
//输出的是李四 意料中事 现在修改的是对象
Console.WriteLine(p.Name);
change(ref p);
//输出的是王五
Console.WriteLine(p.Name);
Console.ReadKey();
}
static void change(Person p){
//修改p的引用 指向新的对象
p = new Person("lisi");
}
static void change(Person p,string name){
//没什么好说的 引用传递 修改对象
p.Name = name;
}
static void change(ref Person p){
//同样是 让p指向另一个对象
p = new Person("wangwu");
}
}}
难到说 ref 把p变量的地址传进去 这样才可以该了形参的值(地址) 才能改实参的值(地址)那么岂不是说 在函数里 先 通过p的地址找到p变量 在根据变量的值(地址) 在找到对象 有人能给我解释下疑问吗?