.NET 帮助

C# 这 (它是怎么为开发人员工作的)

Chipego
奇佩戈-卡琳达
2023年六月13日
分享:

C# 中有一个特别重要的关键字,那就是 this 关键字。 该关键字指的是使用它的当前类实例。 除其他外,它还可用于区分同名的类级变量和方法参数。 例如,如果您有一个同名的实例变量和一个同名的方法参数,"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 "关键字,构造函数重载成为同一类中的一项强大技术。 当一个类(如 "学生 "类)有多个参数各不相同的构造函数时,"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# This(如何为开发人员工作) 图 1

结论

现在,您应该对 C# 中的 this 关键字有了很好的了解,包括其广泛的用途,从简单的实例变量到复杂的上下文,如构造函数、扩展方法、属性、委托、匿名方法,甚至在使用 IronPDF 等流行库时。

请记住,IronPDF 可提供免费试用 IronPDF如果您想了解更多有关 Node.js 和 .NET 的信息,请点击此处,这样您就可以对今天所学的一切进行测试。 如果您决定继续使用,许可证起价仅为 \$liteLicense。 IronPDF 可以成为您 C# 开发工具包中值得一用的工具,简化在应用程序中处理 PDF 文件的任务。

Chipego
软件工程师
Chipego 拥有出色的倾听技巧,这帮助他理解客户问题并提供智能解决方案。他在 2023 年加入 Iron Software 团队,此前他获得了信息技术学士学位。IronPDF 和 IronOCR 是 Chipego 主要专注的两个产品,但他对所有产品的了解每天都在增长,因为他不断找到支持客户的新方法。他喜欢 Iron Software 的合作氛围,公司各地的团队成员贡献他们丰富的经验,以提供有效的创新解决方案。当 Chipego 离开办公桌时,你经常可以发现他在看书或踢足球。
< 前一页
C# 新手指南(开发人员如何使用)
下一步 >
C# 列表 (开发人员如何使用)