透かしなしで本番環境でテストしてください。
必要な場所で動作します。
30日間、完全に機能する製品をご利用いただけます。
数分で稼働させることができます。
製品トライアル期間中にサポートエンジニアリングチームへの完全アクセス
C#には特別な重要性を持つ特定のキーワードがあり、それがthis
キーワードです。 このキーワードは、それが使用されている現在のクラスインスタンスを指します。 これは、同じ名前を共有するクラスレベルの変数とメソッドのパラメータを区別するために使用されます。 たとえば、インスタンス変数と同じ名前のメソッドパラメーターがある場合、this
は救い主になることがあります!
例えば、Employee
のようなパブリッククラスでは、id
や name
のようなパブリックインスタンス変数が含まれているかもしれません。 これらのインスタンス変数にメソッド内で値を割り当てたい場合、一般的な問題に直面するかもしれません: メソッドのパラメーターがインスタンス変数と同じ名前である場合はどうしますか?
こちらが解決策です: this
キーワードをC#のドキュメントで使用する ことです! 以下の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
キーワードを活用することで、コンストラクタのオーバーロードは同一クラス内で強力な手法となります。 クラス、例えばstudent
クラスのように、異なるパラメータを持つ複数のコンストラクターがある場合、this
キーワードを使用すると、1つのコンストラクターが別のコンストラクターを呼び出すことができ、冗長なコードの必要がなくなります。
次の例を考えてみましょう。ここでは、パラメトリックコンストラクタで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("Default", 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);
}
}
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
キーワードは、インデクサーを定義する際にも使用できます。 インデクサーにより、クラスのインスタンスを配列のようにインデックス付けすることができます。 これは、インデックスのような表記法を使用してオブジェクト内のデータにアクセスするのに役立ちます。 インデクサーでは、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
について注意すべき点の一つは、静的メンバーやメソッドを参照するために使用できないということです。 これは、this
は現在のインスタンスを指し、static メンバーはクラス自体に属し、クラスのインスタンスには属していないためです。
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
キーワードとプロパティインスタンス変数やメソッドパラメーターと同様に、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
キーワードを実装するHTMLを使用してPDFファイルを作成および編集する強力な.NETライブラリである[IronPDF](/)と`this`キーワードを組み合わせて使用する可能性のある例を見ていきましょう。
PDFファイルに対して様々な操作を行うためにIronPDFライブラリを使用するPDFHandler
というクラスを考えてみてください。
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の無料試用版を提供しているので、今日学んだことをすべて試すことができます。 継続することを決定した場合、ライセンスは"$liteLicense "からとなります。 IronPDFは、C#開発ツールキットに追加する価値のあるツールであり、アプリケーションでのPDFファイルの取り扱いを簡素化します。