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


這時的 this 我們看到是一個正常的藍(lán)色,如果不需要用到 this 關(guān)鍵字,那么 this 字體則是灰色的。
三、作為參數(shù)傳遞
如果其他類的參數(shù)類型和當(dāng)前類一致,直接寫 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);
}
}調(diào)用 Test2.MyTest() 就會輸出:厚禮蟹
四、作為索引器
作為索引器,在平時的項(xiàng)目中用的并不多,但在微軟給我們封裝好的方法中,用的特別多,我們常用的數(shù)組,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 的值超過了數(shù)組的范圍");
return null;
}
return NameList[index];
}
}
}
}執(zhí)行后,會輸出:李四
五、調(diào)用其他的構(gòu)造函數(shù)
在實(shí)例化當(dāng)前的類的時候,不僅僅是調(diào)用一個構(gòu)造函數(shù),用 this 就可以調(diào)用其他的構(gòu)造函數(shù),甚至在調(diào)用的時候,還可以執(zhí)行其他的屬性,字段,調(diào)用其他的方法,這些都是沒問題的。
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 關(guān)鍵字類似,不過 base 是調(diào)用父類的構(gòu)造函數(shù)。
執(zhí)行后輸出:
姓名:王五
年齡:4
六、擴(kuò)展靜態(tài)類方法
擴(kuò)展方法的核心三要素是靜態(tài)類,靜態(tài)方法,和this參數(shù)。
既在靜態(tài)類中定義的靜態(tài)方法,該方法的第一個參數(shù)帶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 的擴(kuò)展方法:" + s);
}
public static void TestInt(this int t)
{
Console.WriteLine("這是 int 的擴(kuò)展方法:" + t);
}
}
}在上面的 TestString 方法中,參數(shù)前面加 this ,可以理解為 給 string 類 添加了一個 靜態(tài)方法 TestString,那么我們可以在其他的類中使用 string 類型變量直接調(diào)用這個方法了,而不需要使用 Espandi.TestString() 這種方式調(diào)用。
輸出

上面的效果并不是那么明顯,這個案例應(yīng)該清晰很多
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);
}
}
}
運(yùn)行:

這個擴(kuò)展方法,最大的好處就是調(diào)用的時候少寫一個參數(shù)吧,想不出其他的好處了
結(jié)束
到此這篇關(guān)于C#中this的五種用法小結(jié)的文章就介紹到這了,更多相關(guān)C# this用法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
深入DropDownList用法的一些學(xué)習(xí)總結(jié)分析
本篇文章是對DropDownList的用法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06
C#中遍歷DataSet數(shù)據(jù)集對象實(shí)例
這篇文章主要介紹了C#中遍歷DataSet數(shù)據(jù)集對象實(shí)例,經(jīng)常忘記如何操作DataSet,這里記下來并分享,讓需要的朋友可以參考下2014-08-08
C# 調(diào)用exe傳參,并獲取打印值的實(shí)例
這篇文章主要介紹了C# 調(diào)用exe傳參,并獲取打印值的實(shí)例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-04-04
使用C#實(shí)現(xiàn)設(shè)置 Excel單元格格式的示例詳解
這篇文章主要為大家詳細(xì)介紹了如何通過使用C#在同一個工作表中設(shè)置 字體、背景顏色、行高列寬、邊框和單元格合并,文中的示例代碼講解詳細(xì),需要的小伙伴可以了解下2025-09-09

