如果按引用传递引用类型,被调用者可能改变对象的状态数据的值和所引用的对象。

 

  如果按值传递引用类型,被调用者可能改变对象的状态数据的值,但不能改变所引用的对象。

 

  

     

  static void Main(string[] args)        

  {            

      // Passing ref-types by ref.            

    Console.WriteLine("***** Passing Person object by reference *****");            

    Person mel = new Person("Mel", 23);

            Console.WriteLine("Before by ref call, Person is:");

            mel.Display();

            SendAPersonByValue(mel);

            Console.WriteLine("After by ref call, Person is:");

            mel.Display();

            SendAPersonByReference(ref mel);

            Console.WriteLine("After by ref call, Person is:");

            mel.Display();

        }

      

  static void SendAPersonByValue(Person p)

        {   

      // Change the age of "p"?            

       p.personAge = 99;

              // Will the caller see this reassignment?

              p = new Person("Nikki", 41);

        }

        static void SendAPersonByReference(ref Person p)

         {            

      // Change some data of "p".            

      p.personAge = 555;

              // "p" is now pointing to a new object on the heap!            

      p = new Person("Nikki", 999);

        }       

 

  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  

 posted on 2012-08-09 19:47  飞翔@骑士  阅读(77)  评论(0编辑  收藏  举报