程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#——傳值參數(2)

C#——傳值參數(2)

編輯:C#入門知識

C#——傳值參數(2)。本站提示廣大學習愛好者:(C#——傳值參數(2))文章只能為提供參考,不一定能成為您想要的結果。以下是C#——傳值參數(2)正文


//我的C#是跟著猛哥(劉鐵猛)(算是我的正式教師)《C#言語入門詳解》學習的,微信上猛哥也給我解說了一些不懂得中央,關於我來說幾乎是一筆巨額財富,難得良師!

 

這次與大家共同窗習C#中的 值參數——援用類型

上篇文章我與大家共同窗習了 值參數——值類型

我們知道:1.值參數創立變量的正本 2.對值參數的改動不會影響變量的值

這次來看 值參數——援用類型,創立新對象

看一個例子:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 
 7 namespace ParametersSimple
 8 {
 9     class Program
10     {
11         static void Main(string[] args)
12         {
13             Student stu = new Student() { Name = "Tom" };
14             Method(stu);
15             Console.WriteLine(stu.Name);
16         }
17 
18         //創立一個叫Method的靜態辦法傳出去的參數是Student類型的參數
19         //辦法內我們創立一個實例並由stu這個參數援用著,新創立的實例名字叫“Mark”
20         static void Method(Student stu)
21         {
22             stu = new Student() { Name = "Mark" };
23             Console.WriteLine(stu.Name);
24         }
25     }
26 
27     class Student
28     {
29         public string  Name { get; set; }
30     }
31 }

順序運轉後,窗口內上下兩行辨別顯示:

----------------------------------------------

Mark

Tom

-----------------------------------------------

大家可以自行編譯一下。

解釋:

援用類型存儲的是實例的地址

辦法外的變量stu存儲了對象的地址,傳入辦法裡的值也便是對象的地址,還記著嗎:值參數創立變量的正本 此時辦法內的正本也存儲了這個對象的地址

我們調用辦法後,改動了正本裡的值,也便就是改動了正本裡之前存的地址,換成了一個新地址,那麼自但是然的它指向了一個新對象 還記著嗎:對值參數的改動不會影響變量的值

所以 辦法外的變量照舊指向原來的那個對象,而更改後的正本指向了一個新對象,它們互不影響。

 

這個例子有個害處,那就是我把辦法內和辦法外的stu的對象的名字都改成一樣的,順序運轉完後屏幕上打印出兩個相反的名字,那麼就無法分辨了。

所以我們要改良!

GetHashCode() 辦法
每個對象的HashCode是不一樣的
所以:
 1 namespace ParametersSimple
 2 {
 3     class Program
 4     {
 5         static void Main(string[] args)
 6         {
 7             Student stu = new Student() { Name = "Tom" };
 8             Method(stu);
 9             Console.WriteLine("{0},{1}", stu.GetHashCode(), stu.Name);
10         }
11 
12         13         
14         static void Method(Student stu)
15         {
16             stu = new Student() { Name = "Tom" };//我把這裡的名字改的和辦法外的一樣了
17             Console.WriteLine("{0},{1}",stu.GetHashCode(),stu.Name);
18         }
19     }
20 
21     class Student
22     {
23         public string  Name { get; set; }
24     }
25 }

運轉後果

留意到了嗎,名字後面的數值不一樣,闡明他們辨別指向了不同的對象,辦法內的正本指向了一個新的對象

------------------------------------------------------------------------------------------------------------------------

To be Continued!

下篇與大家一同學習  傳值參數--援用類型,不創立新對象,只操作對象

 -----------------------------------------------------------------------------------------------------------------------

希望廣闊網友指出問題所在,指出我哪裡了解錯了,共同交流,共同提高!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved