先说我的疑问吧 事情是这样的  我在一个函数中传一个对象作为参数 ,在函数里我为形参改变了引用 指向另外一个对象  但是出了函数  实参没有改变后来我一想参数的作用域在函数体内  除了函数体就被销毁了  你改了它的引用,有什么用?再来说下我的看法: 形参和实参 是两个变量  它们指向同一个地址  但是两个变量的地址不同   修改变量的引用是修改变量的值(地址) 就跟值传递一样改了 形参的值(地址) 不能改变实参的值 (地址)问题来了, 我突然想起了用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变量  在根据变量的值(地址) 在找到对象   有人能给我解释下疑问吗?

 

posted on 2010-09-04 02:17  asad  阅读(1390)  评论(3编辑  收藏  举报