.NET-HILFE

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

In C# ist das ref-Schlüsselwort ein leistungsstarkes Feature, das es Methoden ermöglicht, den Parameterwert übergebener Referenztyp-Variablen zu ändern. Das Verständnis der Verwendung von ref kann Ihre Fähigkeit zur Verwaltung und Manipulation von Daten innerhalb Ihrer Anwendungen verbessern.

Dieser Artikel führt Sie durch die Grundlagen des ref-Schlüsselworts, seine Anwendung und die Feinheiten der Verwendung mit verschiedenen Datentypen. Wir werden auch die IronPDF library for .NET kennenlernen, die eine PDF-Bibliothek ist.

Verstehen der Schiedsrichter-Parameter

Ein ref-Parameter ist ein Methodenparameter, der als Referenz auf die in die Methode übergebene Variable fungiert. Im Gegensatz zu Standardwertparametern, bei denen nur eine Kopie der Variablen übergeben wird, ermöglichen ref-Parameter der aufgerufenen Methode, den Wert der ursprünglichen Variablen zu ändern. Dieses Verhalten ist von entscheidender Bedeutung, wenn eine Methode den Zustand der ihr übergebenen Variablen aktualisieren soll.

Betrachten Sie das folgende Beispiel, um die grundlegende Verwendung von ref zu demonstrieren, wobei der Fokus darauf liegt, wie eine Verweistyp-Variable ihren Parameterwert im selben Objekt während der gesamten Methodenaufrufe beibehält:

class Program
{
    static void Main()
    {
        int number = 100;
        ModifyNumber(ref number);
        Console.WriteLine(number);
    }
    static void ModifyNumber(ref int number)
    {
        number = 200;
    }
}
class Program
{
    static void Main()
    {
        int number = 100;
        ModifyNumber(ref number);
        Console.WriteLine(number);
    }
    static void ModifyNumber(ref int number)
    {
        number = 200;
    }
}
Friend Class Program
	Shared Sub Main()
		Dim number As Integer = 100
		ModifyNumber(number)
		Console.WriteLine(number)
	End Sub
	Private Shared Sub ModifyNumber(ByRef number As Integer)
		number = 200
	End Sub
End Class
$vbLabelText   $csharpLabel

In diesem Beispiel deklariert die Main-Methode eine Ganzzahl number und initialisiert sie mit 100. Dann wird ModifyNumber aufgerufen und number als ref-Parameter übergeben. Innerhalb von ModifyNumber wird der Wert von number auf 200 geändert. Da number als Referenz übergeben wird, spiegelt sich die Änderung im ursprünglichen Wert in der Main-Methode wider, und 200 wird in die Konsole ausgegeben.

Funktionsweise der ref-Parameter

Wenn Sie einen Methodenparameter mit dem ref-Schlüsselwort deklarieren, geben Sie dem Compiler an, dass der Parameter auf die ursprüngliche Variable und nicht auf eine Kopie verweist. Dies wird dadurch erreicht, dass nicht der tatsächliche Wert, sondern die Speicheradresse der Variablen übergeben wird. Sowohl die aufgerufene Methode als auch die aufrufende Methode greifen auf denselben Speicherplatz zu, was bedeutet, dass alle Änderungen am Parameter direkt an der ursprünglichen Variablen vorgenommen werden.

Der Schlüssel zum Verständnis von ref liegt darin, zu erkennen, dass es sowohl mit Werttypen als auch mit Referenztypen verwendet werden kann. Werttypen umfassen einfache Datentypen wie ganzzahlige Werte und Strukturen, während Referenztypen Objekte und Arrays umfassen. Jedoch, auch wenn Referenztyp-Variablen von Natur aus Speicheradressen halten, erlaubt die Verwendung von ref mit Referenztypen, die tatsächliche Referenz zu modifizieren und nicht nur den Inhalt des Objekts.

Unterschiede zwischen ref und out

Während sowohl die Schlüsselwörter ref als auch out eine Modifikation der ursprünglichen Variablen ermöglichen, gibt es wichtige Unterschiede. Ein out-Parameter erfordert keine Initialisierung, bevor er an eine Methode übergeben wird. Im Gegensatz dazu erfordert ein ref-Parameter, dass die Variable initialisiert wird, bevor sie übergeben wird. Des Weiteren ist eine Methode, die einen out-Parameter verwendet, verpflichtet, einen Wert zuzuweisen, bevor die Methode zurückkehrt. Diese Anforderung gilt nicht für ref-Parameter.

So könnten Sie das out-Schlüsselwort verwenden:

class Program
{
    static void Main()
    {
        int result;
        CalculateResult(out result);
        Console.WriteLine(result);
    }
    static void CalculateResult(out int calculation)
    {
        calculation = 20 * 5;
    }
}
class Program
{
    static void Main()
    {
        int result;
        CalculateResult(out result);
        Console.WriteLine(result);
    }
    static void CalculateResult(out int calculation)
    {
        calculation = 20 * 5;
    }
}
Friend Class Program
	Shared Sub Main()
		Dim result As Integer = Nothing
		CalculateResult(result)
		Console.WriteLine(result)
	End Sub
	Private Shared Sub CalculateResult(ByRef calculation As Integer)
		calculation = 20 * 5
	End Sub
End Class
$vbLabelText   $csharpLabel

In diesem Fall initialisiert CalculateResult die Berechnung innerhalb der Methode, und Main reflektiert das Ergebnis.

Praktische Verwendung von ref bei der Methodenüberladung

ref kann auch bei der Methodenüberladung verwendet werden, wobei die Methodensignatur durch das ref-Schlüsselwort verändert wird. Methodensignaturen bestehen aus dem Methodennamen und ihren Parametertypen, einschließlich der Art, wie Parameter übergeben werden: als Referenz (ref), als Wert oder als out-Parameter.

Erwägen Sie das Überladen von Methoden basierend auf ref- und Wertparametern:

class Program
{
    static void Main()
    {
        int normalParameter = 10, refParameter = 10;
        IncrementValue(normalParameter);
        IncrementValue(ref refParameter);
        Console.WriteLine($"Normal: {normalParameter}, Ref: {refParameter}");
    }
    static void IncrementValue(int number)
    {
        number++;
    }
    static void IncrementValue(ref int number)
    {
        number++;
    }
}
class Program
{
    static void Main()
    {
        int normalParameter = 10, refParameter = 10;
        IncrementValue(normalParameter);
        IncrementValue(ref refParameter);
        Console.WriteLine($"Normal: {normalParameter}, Ref: {refParameter}");
    }
    static void IncrementValue(int number)
    {
        number++;
    }
    static void IncrementValue(ref int number)
    {
        number++;
    }
}
Friend Class Program
	Shared Sub Main()
		Dim normalParameter As Integer = 10, refParameter As Integer = 10
		IncrementValue(normalParameter)
		IncrementValue(refParameter)
		Console.WriteLine($"Normal: {normalParameter}, Ref: {refParameter}")
	End Sub
'INSTANT VB TODO TASK: VB does not allow method overloads which differ only in parameter ByVal/ByRef:
'ORIGINAL LINE: static void IncrementValue(int number)
	Private Shared Sub IncrementValue(ByVal number As Integer)
		number += 1
	End Sub
'INSTANT VB TODO TASK: VB does not allow method overloads which differ only in parameter ByVal/ByRef:
'ORIGINAL LINE: static void IncrementValue(ref int number)
	Private Shared Sub IncrementValue(ByRef number As Integer)
		number += 1
	End Sub
End Class
$vbLabelText   $csharpLabel

Hier ist IncrementValue überladen mit einer Version, die einen normalen Parameter annimmt, und einer, die einen ref-Parameter annimmt. Die ref-Version erhöht die ursprüngliche Variable, während die normale Version nur eine Kopie ändert.

Einführung in IronPDF

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

IronPDF for .NET PDF Solutions ist eine umfassende .NET-Bibliothek, die für die Arbeit mit PDF-Dokumenten konzipiert ist. Es ist hauptsächlich in C# entwickelt und konzentriert sich darauf, die Erstellung und Bearbeitung von PDFs aus HTML-Inhalten zu vereinfachen. Durch den Einsatz einer Chrome Rendering Engine liefert IronPDF qualitativ hochwertige, pixelgenaue PDF-Dokumente, die die Feinheiten von HTML, CSS, JavaScript und Bildinhalten berücksichtigen.

Diese Bibliothek ist vielseitig und unterstützt eine breite Palette von .NET-Umgebungen, einschließlich .NET-Framework, .NET Core und .NET-Standard, was sie für verschiedene Anwendungen von Desktop- bis zu webbasierten Systemen geeignet macht. IronPDF unterstützt nicht nur die Erstellung von PDFs, sondern bietet auch Funktionen zur Bearbeitung, Sicherung und Konvertierung von PDFs in andere Formate.

Diese Fähigkeit erstreckt sich auf das Extrahieren von Text und Bildern, das Ausfüllen von Formularen und sogar das Anbringen digitaler Signaturen, was eine umfassende Handhabung von PDF-Dokumenten innerhalb von .NET-Anwendungen gewährleistet.

Integration von IronPDF mit C# und ref Keyword

IronPDF kann in C# integriert werden, um die leistungsstarken Funktionen der Sprache zu nutzen, einschließlich der Verwendung des ref-Schlüsselworts zum Übergeben von Parametern als Referenz. Diese Integration ermöglicht eine dynamische PDF-Erzeugung, bei der der Inhalt von Variablen abhängen kann, deren Werte zur Laufzeit bestimmt werden.

Um die Integration von IronPDF mit C# unter Verwendung des ref-Schlüsselworts zu veranschaulichen, betrachten Sie ein Szenario, in dem wir einen PDF-Bericht erstellen möchten, der einen dynamisch berechneten Wert enthält. Dieser Wert wird innerhalb einer Methode berechnet, die einen ref-Parameter akzeptiert, wodurch die Methode diesen Wert ändern kann, der dann im generierten PDF widergespiegelt wird.

Code-Beispiel: Generierung einer PDF-Datei mit dynamischem Inhalt mit ref

Der folgende C#-Code demonstriert, wie IronPDF in Verbindung mit dem ref-Schlüsselwort verwendet wird, um ein PDF-Dokument zu erstellen. Der Code berechnet einen Wert, modifiziert ihn über eine Methode, die einen ref-Parameter akzeptiert, und verwendet dann IronPDF, um eine PDF zu erstellen, die diesen dynamischen Inhalt enthält.

using IronPdf;
using System;
class Program
{
    static void Main(string [] args)
    {
        License.LicenseKey = "License-Key";
        // Initialize the value
        int totalSales = 150;
        // Modify the value within the method using 'ref'
        AddMonthlyBonus(ref totalSales);
        // Use IronPDF to generate a PDF report
        var Renderer = new ChromePdfRenderer();
        var PDF = Renderer.RenderHtmlAsPdf($"<h1>Monthly Sales Report</h1><p>Total Sales, including bonus: {totalSales}</p>");
        // Save the PDF to a file
        PDF.SaveAs("MonthlySalesReport.pdf");
        // Confirm the PDF has been generated
        Console.WriteLine("PDF generated successfully. Check your project directory.");
    }
    static void AddMonthlyBonus(ref int sales)
    {
        // Assume a bonus of 10% of the sales
        sales += (int)(sales * 0.1);
    }
}
using IronPdf;
using System;
class Program
{
    static void Main(string [] args)
    {
        License.LicenseKey = "License-Key";
        // Initialize the value
        int totalSales = 150;
        // Modify the value within the method using 'ref'
        AddMonthlyBonus(ref totalSales);
        // Use IronPDF to generate a PDF report
        var Renderer = new ChromePdfRenderer();
        var PDF = Renderer.RenderHtmlAsPdf($"<h1>Monthly Sales Report</h1><p>Total Sales, including bonus: {totalSales}</p>");
        // Save the PDF to a file
        PDF.SaveAs("MonthlySalesReport.pdf");
        // Confirm the PDF has been generated
        Console.WriteLine("PDF generated successfully. Check your project directory.");
    }
    static void AddMonthlyBonus(ref int sales)
    {
        // Assume a bonus of 10% of the sales
        sales += (int)(sales * 0.1);
    }
}
Imports IronPdf
Imports System
Friend Class Program
	Shared Sub Main(ByVal args() As String)
		License.LicenseKey = "License-Key"
		' Initialize the value
		Dim totalSales As Integer = 150
		' Modify the value within the method using 'ref'
		AddMonthlyBonus(totalSales)
		' Use IronPDF to generate a PDF report
		Dim Renderer = New ChromePdfRenderer()
		Dim PDF = Renderer.RenderHtmlAsPdf($"<h1>Monthly Sales Report</h1><p>Total Sales, including bonus: {totalSales}</p>")
		' Save the PDF to a file
		PDF.SaveAs("MonthlySalesReport.pdf")
		' Confirm the PDF has been generated
		Console.WriteLine("PDF generated successfully. Check your project directory.")
	End Sub
	Private Shared Sub AddMonthlyBonus(ByRef sales As Integer)
		' Assume a bonus of 10% of the sales
		sales += CInt(Math.Truncate(sales * 0.1))
	End Sub
End Class
$vbLabelText   $csharpLabel

C# Ref (Wie es für Entwickler funktioniert): Abbildung 2

In diesem Beispiel beginnt totalSales bei 150. Die Methode AddMonthlyBonus nimmt diesen Wert als Referenz mit dem Schlüsselwort ref, berechnet einen 10% Bonus und fügt ihn zum ursprünglichen Verkaufswert hinzu. IronPDF generiert dann ein PDF-Dokument, das ein HTML-Snippet enthält, das den Gesamtumsatz einschließlich des Bonus ausweist. Das endgültige Dokument wird lokal als "MonthlySalesReport.pdf" gespeichert.

Schlussfolgerung

C# Ref (Wie es für Entwickler funktioniert): Abbildung 3

Das Verständnis des ref-Schlüsselwortes in C# bietet ein wertvolles Werkzeug zur Verwaltung der Datenübergabe zwischen Methoden. Indem Methoden es ermöglicht wird, die ursprünglichen Werte der an sie übergebenen Parameter direkt zu ändern, kann ref Ihre Methoden flexibler und leistungsfähiger machen.

Mit zunehmender Erfahrung mit ref werden Sie besser verstehen, wann und wie Sie es effektiv einsetzen, um Ihre Programmieranforderungen zu erfüllen. IronPDF bietet eine kostenlose Testversion, um mit PDF-Funktionen zu starten, und die Preise beginnen bei $749.

Chipego
Software-Ingenieur
Chipego hat eine natürliche Fähigkeit zum Zuhören, die ihm hilft, Kundenprobleme zu verstehen und intelligente Lösungen anzubieten. Er trat dem Iron Software-Team 2023 bei, nachdem er einen Bachelor of Science in Informationstechnologie erworben hatte. IronPDF und IronOCR sind die beiden Produkte, auf die sich Chipego konzentriert hat, aber sein Wissen über alle Produkte wächst täglich, da er neue Wege findet, Kunden zu unterstützen. Er genießt die Zusammenarbeit bei Iron Software, da Teammitglieder aus dem gesamten Unternehmen ihre unterschiedlichen Erfahrungen einbringen und so zu effektiven, innovativen Lösungen beitragen. Wenn Chipego nicht an seinem Schreibtisch sitzt, kann man ihn oft bei einem guten Buch oder beim Fußballspielen antreffen.
< PREVIOUS
MS Graph .NET (Wie es für Entwickler funktioniert)
NÄCHSTES >
Mudblazor .NET 8 (Wie es für Entwickler funktioniert)