C#中this的五種用法小結
一、需求
一般來說,this 僅僅局限于對象內部,對象外部是無法看到的,這就是this的基本思想,在我們的項目開發(fā)中,this關鍵字用的并不多,這也導致有些程序員對它的認識就不充足,有些知識點就會錯過,this的功能絕對不是網上一些課程講的那樣,只是用來區(qū)分全局變量和局部變量,下面我就介紹 this 的幾種用法,必定能讓你對這個關鍵字有一個全新的認識。
二、區(qū)分當前類的對象
這個是常用的功能,如下圖,熟悉的可以直接跳過,假設當前類有一個全局變量和當前方法中的參數名一模一樣的時候,Visual Studio 就會提示異常,因為系統不知道你到底要給誰賦值,按 C# 的編程規(guī)范來說,全局變量最好第一個字母用大寫,當然你也可以用小寫,在遇到下面的這種情況時,只要前面加一個 this,系統就知道左邊的 name 是當前類的成員,而右邊的 name 則是方法的參數。


這時的 this 我們看到是一個正常的藍色,如果不需要用到 this 關鍵字,那么 this 字體則是灰色的。
三、作為參數傳遞
如果其他類的參數類型和當前類一致,直接寫 this 即可
public class Test1
{
public void MyTest(Test2 test2)
{
Console.WriteLine(test2.Name);
}
}
public class Test2
{
public string Name = "厚禮蟹";
public void MyTest()
{
new Test1().MyTest(this);
}
}調用 Test2.MyTest() 就會輸出:厚禮蟹
四、作為索引器
作為索引器,在平時的項目中用的并不多,但在微軟給我們封裝好的方法中,用的特別多,我們常用的數組,List 等,基本都是使用索引器去讀取的。
namespace 計算3
{
public class Program
{
static void Main(string[] args)
{
Test1 test1 = new Test1();
Console.WriteLine(test1[1]);
Console.ReadKey();
}
}
public class Test1
{
string[] NameList = new string[3] { "張三", "李四", "王五" };
public string this[int index]
{
get
{
if(index < 0 || index >= NameList.Length)
{
Console.WriteLine("index 的值超過了數組的范圍");
return null;
}
return NameList[index];
}
}
}
}執(zhí)行后,會輸出:李四
五、調用其他的構造函數
在實例化當前的類的時候,不僅僅是調用一個構造函數,用 this 就可以調用其他的構造函數,甚至在調用的時候,還可以執(zhí)行其他的屬性,字段,調用其他的方法,這些都是沒問題的。
namespace 計算3
{
public class Program
{
static void Main(string[] args)
{
Test1 test1 = new Test1("王五");
Console.ReadKey();
}
}
public class Test1
{
public static int GetAge
{
get => 4;
}
public Test1()
{
}
public Test1(string name, int age)
{
Console.WriteLine("姓名:" + name);
Console.WriteLine("年齡:" + age);
}
public Test1(string name) : this(name, GetAge)
{
}
}
}可以看到,這里的寫法和 base 關鍵字類似,不過 base 是調用父類的構造函數。
執(zhí)行后輸出:
姓名:王五
年齡:4
六、擴展靜態(tài)類方法
擴展方法的核心三要素是靜態(tài)類,靜態(tài)方法,和this參數。
既在靜態(tài)類中定義的靜態(tài)方法,該方法的第一個參數帶this
namespace 計算3
{
public class Program
{
static void Main(string[] args)
{
string name = "233";
name.TestString();
int age = 3;
age.TestInt();
Console.ReadKey();
}
}
public static class Espandi
{
public static void TestString(this string s)
{
Console.WriteLine("這是 string 的擴展方法:" + s);
}
public static void TestInt(this int t)
{
Console.WriteLine("這是 int 的擴展方法:" + t);
}
}
}在上面的 TestString 方法中,參數前面加 this ,可以理解為 給 string 類 添加了一個 靜態(tài)方法 TestString,那么我們可以在其他的類中使用 string 類型變量直接調用這個方法了,而不需要使用 Espandi.TestString() 這種方式調用。
輸出

上面的效果并不是那么明顯,這個案例應該清晰很多
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Test4
{
internal class Program
{
static void Main(string[] args)
{
string name = "老王";
name.Test(5);
Console.ReadKey();
}
}
public static class lib
{
public static void Test(this string name, int age)
{
Console.WriteLine("name:{0}, age:{1}",name,age);
}
}
}
運行:

這個擴展方法,最大的好處就是調用的時候少寫一個參數吧,想不出其他的好處了
結束
到此這篇關于C#中this的五種用法小結的文章就介紹到這了,更多相關C# this用法內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
C#利用ms office實現office轉pdf的示例代碼
這篇文章主要介紹了C#利用ms office實現office轉pdf的詳細方法,文中通過代碼示例和圖文講解的非常詳細,對大家的學習或工作有一定的幫助,需要的朋友可以參考下2024-09-09
C#搜索TreeView子節(jié)點,保留父節(jié)點的方法
這篇文章主要介紹了C#搜索TreeView子節(jié)點,保留父節(jié)點的方法,實例分析了C#操作TreeView節(jié)點的相關技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-09-09

