.NET ヘルプ

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

Kannaopat Udonpant
カンナパット・ウドンパント
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;
}

この場合、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)パラメータ化されたコンストラクターを呼び出し、名前と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);
    }
}

ここで、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; }
    }
}

この 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ファイルの作成.

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);
    }
}

この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のような人気のライブラリを使用する場合に至るまで、広範な用途を理解しているはずです。

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

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

Kannaopat Udonpant
カンナパット・ウドンパント
ソフトウェアエンジニア
ソフトウェアエンジニアになる前に、カンナパットは日本の北海道大学から環境資源学の博士号を取得しました。学位を取得する過程で、カンナパットはバイオプロダクション工学部に所属する車両ロボティクス研究所のメンバーにもなりました。2022年には、C#のスキルを活かしてIron Softwareのエンジニアリングチームに参加し、IronPDFに注力しています。カンナパットは、IronPDFで使用されているコードの大部分を作成した開発者から直接学べることに価値を見いだしています。同僚との学び合いに加えて、Iron Softwareで働くことの社会的側面も楽しんでいます。コードやドキュメントを書いていない時には、カンナパットは通常、PS5でゲームをしたり、『The Last of Us』を再視聴したりしています。
< 以前
C# New(開発者向けの動作)
次へ >
C# リスト (開発者向けの動作方法)