.NET 幫助

C# 這個(它如何為開發者工作)

Kannaopat Udonpant
坎納帕特·烏頓潘
2023年6月13日
分享:

在 C# 中有一個特別重要的關鍵字,那就是 this 關鍵字。 此關鍵字指的是用於當前 class 實例的參考。 它可以用來區分同名的類別層級變量與方法參數,以及其他用途。 例如,如果您有一個實例變量和一個具有相同名稱的方法參數,this 可以成為救星。!

該關鍵字的基本知識

在一個公共類別中,例如 Employee,您可能會有公共實例變數,例如 idname。 如果您想在方法內為這些實例變數賦值,可能會遇到一個常見問題:如果方法參數與實例變數同名該怎麼辦?

以下是一個解決方案:使用C# 文件中的 this 關鍵字! 在以下 Employee 公共類別中的方法範例中,this 關鍵字用於區分具有相同名稱的實例變數和方法參數。

public void Display(int id, string name)
{
    this.id = id;
    this.name = name;
}
public void Display(int id, string name)
{
    this.id = id;
    this.name = name;
}

在這種情況下,this.id 指的是實例變數,而 id 是方法參數。

構造器重載中的this關鍵字

透過使用 this 關鍵字,建構函式多載在同一個類別中成為一種強大的技術。 當一個類別,例如 student 類別,具有多個參數不同的建構子時,this 關鍵字可以讓一個建構子呼叫另一個建構子,從而消除冗餘的程式碼。

考慮以下使用 this 的參數化建構函數範例:

public class Student
{
    private string name;
    private int id;

    public Student() : this("Default", 0)
    {
    }

    public Student(string name, int id)
    {
        this.name = name;
        this.id = id;
    }
}
public class Student
{
    private string name;
    private int id;

    public Student() : this("Default", 0)
    {
    }

    public Student(string name, int id)
    {
        this.name = name;
        this.id = id;
    }
}

在沒有參數的建構函數中,this("預設", 0)調用參數化構造函式,將Default設定為名稱和ID。

在擴展方法中探索 this

C#中的擴充方法為現有類型添加方法提供了一種方式,無需修改原始類型。 這就是 this 關鍵字發揮魔力的地方。 它用於擴展方法的參數列表中,以指代被擴展的類型。

請考慮以下擴展方法的例子:

public static class StringExtensions
{
    public static bool IsNullOrEmpty(this string str)
    {
        return string.IsNullOrEmpty(str);
    }
}
public static class StringExtensions
{
    public static bool IsNullOrEmpty(this string str)
    {
        return string.IsNullOrEmpty(str);
    }
}

在這裡,this string str 告訴 C# 這是一個用於字串類型的擴充方法。 現在,您可以在任何字串物件上使用此方法,例如 if(myString.IsNullOrEmpty()).

索引器中的 this

關鍵字 this 也可以用於定義索引器。 索引器允許類別的實例像數組一樣被索引。 這可以幫助您使用類似索引的符號來訪問物件中的數據。 在索引器中,this 之後接著一個陣列索引,通常是 int index

以下是一個索引器的基本範例:

public class Test
{
    private int [] array = new int [100];

    public int this [int index]
    {
        get { return array [index]; }
        set { array [index] = value; }
    }
}
public class Test
{
    private int [] array = new int [100];

    public int this [int index]
    {
        get { return array [index]; }
        set { array [index] = value; }
    }
}

在這個類別 Test 中,this 關鍵字定義了一個索引器,可用來獲取或設置 array 實例欄位中的值。

this 和靜態成員

有一點需要注意的是,this 不能用來引用靜態成員或方法。 這是因為 this 指的是當前的實例,而靜態成員屬於類本身,而不是類的實例。

public class Program
{
    public static void Main(string [] args)
    {
        // Can't use `this` here, because 'Main' is a static method.
    }
}
public class Program
{
    public static void Main(string [] args)
    {
        // Can't use `this` here, because 'Main' is a static method.
    }
}

所以,請記住,this 是用於實例的,而不是用於類別層級或靜態成員!

this 關鍵字和屬性

就像實例變數和方法參數一樣,this 關鍵字也可以用於屬性。 在C#中,屬性是一個成員,提供了一種靈活的機制來讀取、寫入或計算私有欄位的值。 屬性可以像公共數據成員一樣使用,但它們實際上是稱為存取子的方法。

讓我們看看在屬性中使用 this 的一個簡單例子:

public class Employee
{
    private string name;

    public string Name
    {
        get { return this.name; }
        set { this.name = value; }
    }
}
public class Employee
{
    private string name;

    public string Name
    {
        get { return this.name; }
        set { this.name = value; }
    }
}

在上述類別中,this 關鍵字在 Name 屬性的 get 和 set 存取子裡用來引用私有字串 name

探討 this 和委派

另一個出現 this 的地方是在委託中。 C# 中的委派類似於 C 或 C++ 中的函數指標。 這是一種引用類型的變數,用於保存對方法的引用。 委派方法,就像擴展方法一樣,可以使用 this 訪問當前實例。

以下是使用 this 的委派範例:

public delegate void DisplayDelegate();

public class Student
{
    public int Id { get; set; }
    public string Name { get; set; }

    public void Display()
    {
        DisplayDelegate displayDelegate = new DisplayDelegate(this.DisplayDetails);
        displayDelegate();
    }

    private void DisplayDetails()
    {
        Console.WriteLine("ID: " + Id + ", Name: " + Name);
    }
}
public delegate void DisplayDelegate();

public class Student
{
    public int Id { get; set; }
    public string Name { get; set; }

    public void Display()
    {
        DisplayDelegate displayDelegate = new DisplayDelegate(this.DisplayDetails);
        displayDelegate();
    }

    private void DisplayDetails()
    {
        Console.WriteLine("ID: " + Id + ", Name: " + Name);
    }
}

在學生類別中,this.DisplayDetails 創建了一個新的委派實例,該實例引用當前對象的 DisplayDetails 方法。

使用 IronPDF 實現 this 關鍵字

讓我們深入探討一個範例,在這個範例中,你可能會將 this 關鍵字與...IronPDF, 一個強大的 .NET 函式庫,用於編輯和使用HTML建立PDF檔案.

考慮一個名為 PDFHandler 的類,它使用 IronPDF 庫來對 PDF 文件執行各種操作:

using IronPdf;

public class PDFHandler
{
    private string path;

    public PDFHandler(string path)
    {
        this.path = path;
    }

    public void GeneratePDF(string content)
    {
        var Renderer = new IronPdf.ChromePdfRenderer();
        var PDF = Renderer.RenderHtmlAsPdf(content);
        PDF.SaveAs(this.path);
    }
}
using IronPdf;

public class PDFHandler
{
    private string path;

    public PDFHandler(string path)
    {
        this.path = path;
    }

    public void GeneratePDF(string content)
    {
        var Renderer = new IronPdf.ChromePdfRenderer();
        var PDF = Renderer.RenderHtmlAsPdf(content);
        PDF.SaveAs(this.path);
    }
}

在這個 PDFHandler 類別中,this 關鍵字用於引用當前實例的 path 欄位。 此欄位用於將生成的 PDF 儲存到指定的路徑。

當我們創建一個新的 PDFHandler 實例並調用 GeneratePDF 方法時,this 關鍵字允許我們使用物件創建時指定的 path

class Program
{
    static void Main(string [] args)
    {
        PDFHandler pdfHandler = new PDFHandler("C:\\ThisKeyowrd.pdf");
        pdfHandler.GeneratePDF("Hello World!");
    }
}
class Program
{
    static void Main(string [] args)
    {
        PDFHandler pdfHandler = new PDFHandler("C:\\ThisKeyowrd.pdf");
        pdfHandler.GeneratePDF("Hello World!");
    }
}

在此,this 使代碼更具可讀性和可理解性,特別是在處理像 IronPDF 這樣的庫時。

C# 這是(開發者如何工作)圖1

結論

到目前為止,您應該對 C# 中的 this 關鍵字有了很好的理解,包括其廣泛的用途,從簡單的實例變量到複雜的上下文,例如構造函數、擴展方法、屬性、委託、匿名方法,甚至在使用 IronPDF 等熱門庫時。

請記住,IronPDF 提供一個IronPDF 免費試用因此,您可以測試今天所學的一切。 如果您決定繼續使用,許可證起始價格僅為 \$liteLicense。 IronPDF 可以成為您的 C# 開發工具包中值得一提的補充,簡化在應用程式中處理 PDF 文件的任務。

Kannaopat Udonpant
坎納帕特·烏頓潘
軟體工程師
在成為軟體工程師之前,Kannapat 在日本北海道大學完成了環境資源博士學位。在攻讀學位期間,Kannapat 也成為了車輛機器人實驗室的成員,該實驗室隸屬於生物生產工程學系。2022 年,他利用自己的 C# 技能,加入了 Iron Software 的工程團隊,專注於 IronPDF 的開發。Kannapat 珍視這份工作,因為他可以直接向負責撰寫大部分 IronPDF 程式碼的開發人員學習。除了同儕學習外,Kannapat 還享受在 Iron Software 工作的社交方面。當他不在撰寫程式碼或文件時,Kannapat 通常會在 PS5 上玩遊戲或重看《最後生還者》。
< 上一頁
C# 新手指南 (開發者使用方式)
下一個 >
C# 列表(開發者使用指南)