.NET ヘルプ

C# これは(開発者向けの作業方法)

公開済み 2023年6月13日
共有:

C#で特に重要なキーワードがあり、それがthisキーワードです。 このキーワードは、それが使用されている現在のクラスインスタンスを指します。 これは、同じ名前を共有するクラスレベルの変数とメソッドのパラメータを区別するために使用されます。 例えば、インスタンス変数とメソッド内の引数が同じ名前の場合、thisは非常に役立ちます。!

このキーワードの基本情報

パブリッククラス(例えば Employee)の場合、idname のようなパブリックインスタンス変数を持つことがあります。 これらのインスタンス変数にメソッド内で値を割り当てたい場合、一般的な問題に直面するかもしれません: メソッドのパラメーターがインスタンス変数と同じ名前である場合はどうしますか?

こちらが解決策です:C# ドキュメントの this キーワード! 以下の例では、public クラス 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
VB   C#

この場合、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;
    }
}
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
VB   C#

パラメータのないコンストラクタでは、this(「デフォルト」、0)パラメータ化されたコンストラクターを呼び出し、名前とIDにDefault` を設定します。

拡張メソッドにおける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
VB   C#

ここで、this string str は、このメソッドが文字列型の拡張メソッドであることをC#に伝えます。 今、このメソッドを任意の文字列オブジェクトに対して使用できます。例えば(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
VB   C#

この 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.
    }
}
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
VB   C#

ですので、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
VB   C#

クラス内では、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
VB   C#

学生クラスでは、this.DisplayDetailsは現在のオブジェクトのDisplayDetailsメソッドを参照するデリゲートの新しいインスタンスを作成します。

IronPDFを使用したthisキーワードの実装

以下は、this キーワードを使用する例についての詳細です。IronPDF強力な .NET ライブラリであるHTMLを使用したPDFファイルの作成.

IronPDFライブラリを使用してPDFファイルに対してさまざまな操作を行う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
VB   C#

この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
VB   C#

ここでは、this を使用することで、特にIronPDFのようなライブラリを扱う際にコードがより読みやすく、理解しやすくなります。

C# の仕組み (開発者向けの動作) 図1

結論

これまでに、C#のthisキーワードについて、シンプルなインスタンス変数から、コンストラクタ、拡張メソッド、プロパティ、デリゲート、匿名メソッド、さらにIronPDFのような人気のライブラリを使用する場合に至るまで、広範な用途を理解しているはずです。

「Remember, IronPDF offers a」で文章が途中までしか提供されていません。具体的な詳細が不足していますので、残念ながら完全な翻訳を提供するのは難しいです。提供された部分だけを翻訳するなら、以下のようになります:

「覚えておいてください、IronPDFは」IronPDFの無料トライアルつまり、今日は学んだすべてを試すことができます。 継続することを決定した場合、ライセンスは"$liteLicense "からとなります。 IronPDFは、C#開発ツールキットに追加する価値のあるツールであり、アプリケーションでのPDFファイルの取り扱いを簡素化します。

< 以前
C# New(開発者向けの動作)
次へ >
C# リスト (開発者向けの動作方法)