在实际环境中测试
在生产中测试无水印。
随时随地为您服务。
C# 中有一个特别重要的关键字,那就是 this
关键字。 该关键字指的是使用它的当前类实例。 除其他外,它还可用于区分同名的类级变量和方法参数。 例如,如果您有一个同名的实例变量和一个同名的方法参数,"this "就会成为您的救星!
在一个公共类(例如Employee
)中,可能会有公共实例变量,如id
或name
。 如果您想在方法中为这些实例变量赋值,您可能会遇到一个常见问题:如果方法参数与实例变量同名怎么办?
这里有一个解决方案:使用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;
}
Public Sub Display(ByVal id As Integer, ByVal name As String)
Me.id = id
Me.name = name
End Sub
在这种情况下,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;
}
}
Public Class Student
Private name As String
Private id As Integer
Public Sub New()
Me.New("Default", 0)
End Sub
Public Sub New(ByVal name As String, ByVal id As Integer)
Me.name = name
Me.id = id
End Sub
End Class
在无参数构造函数中,this("默认",0)调用参数化构造函数,将
Default` 设置为名称和 ID。
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);
}
}
Public Module StringExtensions
<System.Runtime.CompilerServices.Extension> _
Public Function IsNullOrEmpty(ByVal str As String) As Boolean
Return String.IsNullOrEmpty(str)
End Function
End Module
这里,this string str
告诉 C# 这是字符串类型的扩展方法。 现在,您可以在任何字符串对象上使用此方法,如 if(myString.IsNullOrEmpty())
.
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; }
}
}
Public Class Test
Private array(99) As Integer
Default Public Property Item(ByVal index As Integer) As Integer
Get
Return array (index)
End Get
Set(ByVal value As Integer)
array (index) = value
End Set
End Property
End Class
在这个类 Test
中,关键字 this
定义了一个索引器,可用于获取或设置 array
实例字段中的值。
关于 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.
}
}
Public Class Program
Public Shared Sub Main(ByVal args() As String)
' Can't use `this` here, because 'Main' is a static method.
End Sub
End Class
因此,请记住,"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; }
}
}
Public Class Employee
'INSTANT VB NOTE: The field name was renamed since Visual Basic does not allow fields to have the same name as other class members:
Private name_Conflict As String
Public Property Name() As String
Get
Return Me.name_Conflict
End Get
Set(ByVal value As String)
Me.name_Conflict = value
End Set
End Property
End Class
在上述类中,"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);
}
}
Public Delegate Sub DisplayDelegate()
Public Class Student
Public Property Id() As Integer
Public Property Name() As String
Public Sub Display()
Dim displayDelegate As New DisplayDelegate(AddressOf Me.DisplayDetails)
displayDelegate()
End Sub
Private Sub DisplayDetails()
Console.WriteLine("ID: " & Id & ", Name: " & Name)
End Sub
End Class
在学生类中,"this.DisplayDetails "会创建一个新的委托实例,该委托会引用当前对象的 "DisplayDetails "方法。
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);
}
}
Imports IronPdf
Public Class PDFHandler
Private path As String
Public Sub New(ByVal path As String)
Me.path = path
End Sub
Public Sub GeneratePDF(ByVal content As String)
Dim Renderer = New IronPdf.ChromePdfRenderer()
Dim PDF = Renderer.RenderHtmlAsPdf(content)
PDF.SaveAs(Me.path)
End Sub
End Class
在这个 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!");
}
}
Friend Class Program
Shared Sub Main(ByVal args() As String)
Dim pdfHandler As New PDFHandler("C:\ThisKeyowrd.pdf")
pdfHandler.GeneratePDF("Hello World!")
End Sub
End Class
在这里,"this "能使代码更可读、更易懂,尤其是在处理 IronPdf 等库时。
现在,您应该对 C# 中的 this
关键字有了很好的了解,包括其广泛的用途,从简单的实例变量到复杂的上下文,如构造函数、扩展方法、属性、委托、匿名方法,甚至在使用 IronPDF 等流行库时。
请记住,IronPDF 可提供免费试用 IronPDF如果您想了解更多有关 Node.js 和 .NET 的信息,请点击此处,这样您就可以对今天所学的一切进行测试。 如果您决定继续使用,许可证起价仅为 \$liteLicense。 IronPDF 可以成为您 C# 开发工具包中值得一用的工具,简化在应用程序中处理 PDF 文件的任务。