close

【c#note】this

資料來源:http://www.dotblogs.com.tw/chou/archive/2011/07/27/32188.aspx

              http://blog.sina.com.cn/s/blog_96ea9c6f0101crhh.html

 

this 關鍵字是用來參考物件本身,在類別內部存取本身的方法和欄位,平時並不需要特別加上此關鍵字,即可存取類別成員。

那 this 關鍵字是用來做什麼的? 它最大用途在於區隔類別層級與區域層級變數。

當類別層級變數名稱與位於方法內的區域變數名稱相同時,在區域內必定以區域變數為主,並非使用類別層級的同名變數,我們可以透過 this 關鍵字讓你指定取得類別層級的變數而非區域層級的區域變數。

舉一個例子,範例包含兩個類別 Program 與 Compute,請注意註解部分說明

 
01 using System;
02 using System.Collections.Generic;
03 using System.Linq;
04 using System.Text;
05   
06 namespace ConsoleApplicationThis
07 {
08     class Program
09     {
10         static void Main(string[] args)
11         {
12             Console.Write("請輸入小數 : ");
13             double pNum = double.Parse(Console.ReadLine());
14   
15             Compute MyCompute = new Compute();
16             MyCompute.Ceiling(pNum);
17   
18             Console.WriteLine("{0} 無條件進位後等於 {1} !!", MyCompute.pNum, MyCompute.dCeilingNum);
19             Console.ReadLine();
20         }
21     }
22   
23     class Compute
24     {
25         // Compute 類別包含 pNum 與 dCeilingNum 變數
26         public double pNum;
27         public double dCeilingNum;
28   
29         // Ceiling 方法,傳入名稱同為 pNum 的變數
30         public void Ceiling(double pNum)
31         {
32             double dCeilingNum;
33             // 將傳入參數 pNum 指定給類別層級變數 pNum
34             this.pNum = pNum;
35             dCeilingNum = Math.Ceiling(pNum);
36             // 區域變數 dCeilingNum 指定給類別層級變數 dCeilingNum
37             this.dCeilingNum = dCeilingNum;
38         }
39     }
40 }

 

執行結果

 

 

c# this 的五種用法

 

1. this的第一种用法:限定被參數隱藏的實例成員,如下例代碼

public class Test
{
private int hour;
 
public void SomeMethod(int hour)
{
this.hour = hour;
}         
}
this.hour 代表的是當前實例的成員hour , 而hour代表的是SomeMethod的形參hour
 
2. this的第二種用法:把當前對象作為參數傳給另一個方法,如下例代碼
class myClass
{
public void Foo(OtherClass otherObject)
{
otherObject.Bar(this);
}
}
 
public class OtherClass
{
public void Bar(Object obj)
{
}
}
在myClass.Foo方法中,調用了OtherClass實例的Bar方法,而Bar的參數則是當前實例myClass的引用。
 
3. this的第三種用法與索引器有關(後續會詳細說明)
 
4. this的第四種用法是從一个重載構造方法中調用另一個, 如下例代碼:
class myClass
{
public myClass(int i)
{
Console.WriteLine(i);
//...
}
 
public myClass() : this(42)
//...
}
}
使用this(42)調用了public myClass(42)的構造方法。
 
5. this的第五種用法顯式調用一個類的方法和成員, 如下例代碼:
class myClass
{
private int i;
private int z;
 
public void Draw()
}
 
public void MyMethod(int y)
{
this.i = 3;
this.z = 7;
this.Draw();
}
}
在這種情况下,this引用的使用是多餘的。

 

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 bike 的頭像
    bike

    abcbike的筆記書摘

    bike 發表在 痞客邦 留言(0) 人氣()