.NET-HILFE

C# This (Wie es für Entwickler funktioniert)

Kannaopat Udonpant
Kannapat Udonpant
13. Juni 2023
Teilen Sie:

Es gibt ein bestimmtes Schlüsselwort in C#, das eine besondere Bedeutung hat, und das ist das Schlüsselwort this. Dieses Schlüsselwort bezieht sich auf die aktuelle Klasseninstanz, in der es verwendet wird. Er kann unter anderem dazu verwendet werden, um zwischen Variablen auf Klassenebene und Methodenparametern zu unterscheiden, die denselben Namen haben. Wenn Sie zum Beispiel eine Instanzvariable und einen Methodenparameter mit demselben Namen haben, kann "this" ein Lebensretter sein!

Die Grundlagen dieses Schlüsselworts

In einer öffentlichen Klasse, wie zum Beispiel Mitarbeiter, können Sie öffentliche Instanzvariablen wie id oder Name haben. Wenn Sie diesen Instanzvariablen innerhalb einer Methode Werte zuweisen wollen, stoßen Sie möglicherweise auf ein häufiges Problem: Was ist, wenn die Methodenparameter denselben Namen haben wie die Instanzvariablen?

Hier ist eine Lösung: Verwenden Sie diedas Schlüsselwort "this" in der C#-Dokumentation! Im folgenden Beispiel einer Methode innerhalb der öffentlichen Klasse "Employee" wird das Schlüsselwort "this" verwendet, um zwischen den Instanzvariablen und den Methodenparametern zu unterscheiden, die denselben Namen haben.

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

In diesem Fall bezieht sich "this.id" auf die Instanzvariable, und "id" ist der Methodenparameter.

this"-Schlüsselwort in Konstruktorüberladung

Durch die Nutzung des Schlüsselworts "this" wird die Überladung von Konstruktoren zu einer leistungsfähigen Technik innerhalb derselben Klasse. Wenn eine Klasse, wie z.B. eine "Student"-Klasse, mehrere Konstruktoren mit unterschiedlichen Parametern hat, ermöglicht das Schlüsselwort "this", dass ein Konstruktor einen anderen aufruft, so dass kein redundanter Code erforderlich ist.

Betrachten Sie das folgende Beispiel, in dem "this" in einem parametrisierten Konstruktor verwendet wird:

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

In dem parameterlosen Konstruktor wird "this("Standard", 0)ruft den parametrisierten Konstruktor auf, wobei "Default" als Name und als ID festgelegt wird.

Erforschung von "this" in Erweiterungsmethoden

Erweiterungsmethoden in C# bieten eine Möglichkeit, Methoden zu bestehenden Typen hinzuzufügen, ohne den ursprünglichen Typ zu verändern. Hier bewirkt das Schlüsselwort "this" etwas Magisches. Er wird in der Parameterliste der Erweiterungsmethode verwendet, um auf den Typ zu verweisen, der erweitert wird.

Betrachten Sie das folgende Beispiel für eine Erweiterungsmethode:

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

Hier sagt this string str C#, dass es sich um eine Erweiterungsmethode für den Typ String handelt. Jetzt können Sie diese Methode auf jedes beliebige String-Objekt anwenden, z.B. if(myString.IsNullOrEmpty()).

dies" in Indexern

Das Schlüsselwort this kann auch bei der Definition von Indexern verwendet werden. Ein Indexer ermöglicht es, Instanzen einer Klasse genau wie Arrays zu indizieren. So können Sie mit einer indexähnlichen Notation auf Daten innerhalb von Objekten zugreifen. In einem Indexer folgt auf this ein Array-Index, der normalerweise int index ist.

Hier ist ein einfaches Beispiel für einen Indexer:

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

In dieser Klasse Test definiert das Schlüsselwort this einen Indexer, der verwendet werden kann, um Werte im Instanzfeld array zu erhalten oder zu setzen.

this" und statische Mitglieder

Eine Sache, die man bei this beachten sollte, ist, dass es nicht verwendet werden kann, um auf statische Mitglieder oder Methoden zu verweisen. Dies liegt daran, dass sich "this" auf die aktuelle Instanz bezieht und statische Mitglieder zur Klasse selbst gehören, nicht zu einer Instanz der Klasse.

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.
    }
}

Denken Sie also daran, dass "this" für Instanzen, nicht für Klassen oder statische Mitglieder gilt!

this"-Schlüsselwort und Eigenschaften

Genau wie Instanzvariablen und Methodenparameter kann das Schlüsselwort "this" auch für Eigenschaften verwendet werden. In C# ist eine Eigenschaft ein Element, das einen flexiblen Mechanismus zum Lesen, Schreiben oder Berechnen des Wertes eines privaten Feldes bietet. Eigenschaften können so verwendet werden, als wären sie öffentliche Datenmitglieder, aber in Wirklichkeit sind sie spezielle Methoden, die Accessors genannt werden.

Schauen wir uns ein einfaches Beispiel für die Verwendung von "this" in einer Eigenschaft an:

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

In der obigen Klasse wird das Schlüsselwort "this" verwendet, um in den Zugriffsfunktionen "get" und "set" der Eigenschaft "Name" auf die private Zeichenfolge "name" zu verweisen.

Erkundung von "dies" und Delegierten

Ein weiterer Ort, an dem "dies" auftaucht, sind die Delegierten. Ein Delegat in C# ist vergleichbar mit einem Funktionszeiger in C oder C++. Es handelt sich um eine Variable vom Typ Referenz, die den Verweis auf eine Methode enthält. Delegate-Methoden können, genau wie Erweiterungsmethoden, this verwenden, um auf die aktuelle Instanz zuzugreifen.

Hier ist ein Beispiel für einen Delegaten, der this verwendet:

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

In der Schülerklasse wird mit "this.DisplayDetails" eine neue Instanz des Delegaten erstellt, die auf die Methode "DisplayDetails" des aktuellen Objekts verweist.

Implementierung des this-Schlüsselworts mit IronPDF

Betrachten wir ein Beispiel, in dem Sie das Schlüsselwort "this" in Verbindung mitIronPDF, eine leistungsstarke .NET-Bibliothek für die Bearbeitung understellung von PDF-Dateien mit HTML.

Betrachten wir eine Klasse namens PDFHandler, die die IronPDF-Bibliothek verwendet, um verschiedene Operationen mit PDF-Dateien durchzuführen:

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

In dieser "PDFHandler"-Klasse wird das Schlüsselwort "this" verwendet, um auf das Feld "path" der aktuellen Instanz zu verweisen. Dieses Feld wird verwendet, um die erzeugte PDF-Datei unter dem angegebenen Pfad zu speichern.

Wenn wir eine neue Instanz von PDFHandler erstellen und die Methode GeneratePDF aufrufen, erlaubt uns das Schlüsselwort this, den bei der Objekterstellung angegebenen Pfad zu verwenden:

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

Hier macht this den Code lesbarer und verständlicher, besonders wenn man mit Bibliotheken wie IronPDF arbeitet.

C# Dies (Wie es für Entwickler funktioniert) Abbildung 1

Schlussfolgerung

Mittlerweile sollten Sie das this-Schlüsselwort in C# gut verstehen, einschließlich seiner weitreichenden Verwendungsmöglichkeiten, von einfachen Instanzvariablen bis hin zu komplexen Zusammenhängen wie Konstruktoren, Erweiterungsmethoden, Eigenschaften, Delegaten, anonymen Methoden und sogar bei der Verwendung beliebter Bibliotheken wie IronPDF.

Denken Sie daran, IronPDF bietet einekostenlose Testversion von IronPDFso können Sie alles, was Sie heute gelernt haben, unter Beweis stellen. Wenn Sie sich entscheiden, damit weiterzumachen, beginnen die Lizenzen bereits bei \$liteLicense. IronPDF kann eine wertvolle Ergänzung zu Ihrem C#-Entwicklungs-Toolkit sein und die Handhabung von PDF-Dateien in Ihren Anwendungen vereinfachen.

Kannaopat Udonpant
Software-Ingenieur
Bevor er Software-Ingenieur wurde, promovierte Kannapat an der Universität Hokkaido in Japan im Bereich Umweltressourcen. Während seines Studiums wurde Kannapat auch Mitglied des Vehicle Robotics Laboratory, das Teil der Abteilung für Bioproduktionstechnik ist. Im Jahr 2022 wechselte er mit seinen C#-Kenntnissen zum Engineering-Team von Iron Software, wo er sich auf IronPDF konzentriert. Kannapat schätzt an seiner Arbeit, dass er direkt von dem Entwickler lernt, der den Großteil des in IronPDF verwendeten Codes schreibt. Neben dem kollegialen Lernen genießt Kannapat auch den sozialen Aspekt der Arbeit bei Iron Software. Wenn er nicht gerade Code oder Dokumentationen schreibt, kann man Kannapat normalerweise beim Spielen auf seiner PS5 oder beim Wiedersehen mit The Last of Us antreffen.
< PREVIOUS
C# Neu (Wie es für Entwickler funktioniert)
NÄCHSTES >
C# Liste (Wie es für Entwickler funktioniert)