IRONSOFTWAREHOME
ENTWICKLER-UPDATES

C# Record vs Class (Funktionsweise für Entwickler)

Jacob Mellor, Chief Technology Officer @ Team Iron
Jacob Mellor
Updated: 23. April 2026

In der Welt von C# werden zwei primäre Strukturen zur Modellierung und Kapselung von Daten genutzt: Klassen und Records. Beide dienen als Referenztypen, unterscheiden sich jedoch erheblich in ihrer beabsichtigten Verwendung, ihrem Verhalten und der Art und Weise, wie sie Gleichheit behandeln. Dieser Leitfaden wird diese Unterschiede aufschlüsseln und klare Beispiele und praktische Anwendungsfälle zur Unterstützung von Entwicklern bei der Auswahl der richtigen Struktur für ihre Bedürfnisse bieten. Wir werden auch die IronPDF-Bibliothek kennenlernen.

Klassen in C#: Die Grundlagen

Klassen sind ein Grundpfeiler der objektorientierten Programmierung in C#, entworfen zur Kapselung von Daten und Verhalten. Sie sind Referenztypen, was bedeutet, dass zwei Instanzen derselben Klasse mit denselben Werten als zwei getrennte Objekte betrachtet werden. Diese Unterscheidung ist entscheidend, wenn man zwei Klasseninstanzen miteinander vergleicht; der Standardvergleich basiert auf Referenzen, nicht auf Werten.

public class Person
{
    public int Id { get; set; }
    public string FullName { get; set; }
}

Im obigen Beispiel ist Person eine Klasse mit den Eigenschaften Id und FullName. Selbst wenn zwei Person-Instanzen identische Id- und FullName-Werte haben, werden sie standardmäßig nicht als gleich angesehen, weil sie zwei unterschiedliche Referenzen im Arbeitsspeicher sind.

Aufzeichnungen in C#: Unveränderliche Datenstrukturen

Eingeführt in C#, ist der Record-Typ eine neuere Ergänzung, die darauf abzielt, die Erstellung unveränderlicher Datenstrukturen zu vereinfachen und eine robuste Alternative zu traditionellen Klassenstrukturen zu bieten. Im Gegensatz zu Klassen bieten Records wertbasierte Gleichheitssemantik, was sie ideal für Datenübertragungsobjekte oder kleine Datenstrukturen mit wenig oder keinem Verhalten macht.

public record Person(int Id, string FullName);

Im obigen Beispiel ist die Record-Definition prägnanter, was den Boilerplate-Code reduziert. Records unterstützen automatisch nicht-destruktive Mutation und wertbasierten Vergleich. Zwei Record-Instanzen mit denselben Werten werden als gleich angesehen, was den Wertsemantiken entspricht.

Praktische Verwendungen: Wann sollte man Record vs. Class verwenden

Die Wahl zwischen einer Klasse und einem Record oder anderen Datenstrukturen in C# hängt von der Komplexität der Daten, die Sie modellieren, und den Verhaltensanforderungen Ihrer Anwendung ab. Klassen sind speziell für komplexe Datenstrukturen entworfen, die Verhaltensweisen (Methoden) beherbergen und veränderliche Instanzen nach Bedarf zulassen. Records hingegen sind perfekte Beispiele für eine einfache Datenstruktur, die mit unveränderlichen Merkmalen und wertbasierter Gleichheit entworfen wurde, ideal für Daten, die nach der Erstellung konstant bleiben.

Klassen sind ideal, wenn Ihre Datenstruktur die Kapselung von Daten und Verhaltensweisen erfordert oder wenn Sie die Daten nach deren Erstellung manipulieren müssen. Diese Flexibilität macht Klassen zur ersten Wahl für die meisten traditionellen objektorientierten Programmierungsszenarien und bei der Erstellung komplexer Datenstrukturen.

Datensätze glänzen in Szenarien, in denen Datenunveränderlichkeit entscheidend ist oder wenn Sie es mit einfachen Datenstrukturen zu tun haben, die hauptsächlich als Datenspeicher dienen. Ihre eingebaute wertbasierte Gleichheit und Konzeptsprache machen sie hervorragend für Datenübertragungsobjekte oder Wertobjekte.

Werttypen und Referenztypen

Das Verständnis des Unterschieds zwischen Werttyp und Referenztyp in C# ist entscheidend. Klassen sind Referenztypen, was bedeutet, dass Variablen eine Referenz auf die tatsächlichen Daten im Speicher halten. Diese Eigenschaft führt zum Standardvergleich der Referenzen.

Records, obwohl sie auch Referenztypen sind, emulieren Wertsemantiken durch ihre eingebaute wertbasierte Gleichheit, was sie bei Vergleichen ähnlich wie Werttypen agieren lässt.

Code-Beispiele: Implementieren von Klassen und Datensätzen

Lassen Sie uns eine Klasse und ein Record implementieren, um die Unterschiede in Syntax und Verhalten hervorzuheben.

Klassenimplementierung:

public class Product
{
    public int Id { get; set; }
    public string Name { get; set; }

    public Product(int id, string name)
    {
        Id = id;
        Name = name;
    }
}

Record-Implementierung:

public record Product(int Id, string Name);

Beachten Sie die Kürze und Einfachheit der Record-Implementierung. Das Record generiert automatisch den Konstruktor, die Eigenschaften und Methoden für wertbasierte Gleichheit.

Gleichheit verstehen: Referenz vs. Wert

Der wesentliche Unterschied zwischen Klassen- und Record-Typen in C# liegt tatsächlich darin, wie sie Gleichheit behandeln:

  1. Klassen verwenden standardmäßig Referenzgleichheit, was bedeutet, dass zwei Instanzen gleich sind, wenn sie auf denselben Speicherort zeigen.

  2. Records verwenden standardmäßig Wertgleichheit und betrachten zwei Instanzen als gleich, wenn ihre Eigenschaften die gleichen Werte haben.

Beispiel zur Referenzgleichheit (Klasse)

public class Person
{
    public int Id { get; set; }
    public string Name { get; set; }
}

var classInstance1 = new Person { Id = 1, Name = "Iron Software" };
var classInstance2 = new Person { Id = 1, Name = "Iron Software" };
Console.WriteLine(classInstance1 == classInstance2); // Outputs: False

Zwei Instanzen einer Klasse mit denselben Eigenschaftswerten werden nicht als gleich betrachtet, da sie unterschiedliche Objekte im Speicher sind.

Beispiel zur Wertgleichheit

public record Person(int Id, string Name);

var recordInstance1 = new Person(1, "Iron Software");
var recordInstance2 = new Person(1, "Iron Software");
Console.WriteLine(recordInstance1 == recordInstance2); // Outputs: True

Zwei Instanzen eines Records mit denselben Eigenschaftswerten werden standardmäßig als gleich angesehen.

Erweiterte Funktionen: Datensätze

Records kommen mit mehreren erweiterten Funktionen, die die Bedürfnisse nach unveränderlichen Datenstrukturen und wertbasierter Gleichheit erfüllen. Der with-Ausdruck ermöglicht die Erstellung einer neuen Record-Instanz durch das Kopieren eines bestehenden Records, jedoch mit einigen geänderten Eigenschaften, was eine nicht-destruktive Mutation demonstriert.

Nicht-destruktive Mutation mit Records:

var originalRecord = new Person(1, "Doe");
var modifiedRecord = originalRecord with { Name = "Iron Developer" };

Dieses Merkmal ist nützlich, wenn man mit unveränderlichen Datenstrukturen arbeitet, da es eine Möglichkeit bietet, eine Instanz zu 'modifizieren', ohne die ursprünglichen Daten zu ändern.

Einführung in die IronPDF-Bibliothek

IronPDF-Webseite

IronPDF ist eine PDF-Bibliothek für .NET-Entwickler und bietet eine umfassende Lösung zum Erstellen, Bearbeiten und Verwalten von PDF-Dokumenten direkt innerhalb von .NET-Anwendungen. Es vereinfacht den PDF-Erstellungsprozess, indem Entwickler HTML in PDFs umwandeln, CSS, JavaScript und Bilder in PDFs umwandeln können. IronPDF unterstützt eine Vielzahl von .NET-Frameworks und Projekttypen, einschließlich Web-, Desktop- und Konsolenanwendungen, für mehrere Betriebssysteme wie Windows, Linux und macOS.

Neben der PDF-Erstellung bietet IronPDF Funktionen zum Bearbeiten von PDFs, Festlegen von Eigenschaften und Sicherheit, Arbeiten mit PDF-Formularen und Extrahieren von Inhalten. Es ist darauf ausgelegt, die Bedürfnisse von Entwicklern zu erfüllen, die nach einem zuverlässigen Werkzeug suchen, um PDF-Funktionalität in ihre .NET-Projekte zu integrieren.

Codebeispiel

Ein PDF in C# mit IronPDF zu erstellen, kann sowohl mit Klassen als auch mit Records erreicht werden. Im Folgenden finden Sie Beispiele für beide Ansätze zur Erstellung eines einfachen PDF-Dokuments. Der Hauptunterschied zwischen Klassen und Records in C# liegt in ihrer beabsichtigten Verwendung: Klassen sind standardmäßig veränderlich und für die traditionelle objektorientierte Programmierung ausgelegt, während Records unveränderlich und für wertbasierte Programmierung ausgelegt sind, was sie ideal für Datenmodellierung macht.

Verwendung einer Klasse

In diesem Beispiel definieren wir eine PdfGenerator-Klasse, die eine Methode enthält, um ein PDF aus einem gegebenen HTML-String zu erstellen.

using IronPdf;
using System;

public class PdfGenerator
{
    public string HtmlContent { get; set; }

    public PdfGenerator(string htmlContent)
    {
        HtmlContent = htmlContent;
    }

    public void GeneratePdf(string filePath)
    {
        var renderer = new ChromePdfRenderer();
        var pdfDocument = renderer.RenderHtmlAsPdf(HtmlContent);
        pdfDocument.SaveAs(filePath);
    }
}

class Program
{
    public static void Main(string[] args)
    {
        License.LicenseKey = "License-Key"; // Set your license key here

        var generator = new PdfGenerator("<h1>Hello, World from Class!</h1>");
        generator.GeneratePdf("ClassExample.pdf");
    }
}

Ausgabe:

Ausgegebenes PDF aus dem Klassenbeispiel

Verwendung eines Datensatzes

Im Gegensatz dazu ist ein Record in C# nach der Initialisierung unveränderlich. So können Sie mit einem Datensatz ein ähnliches Ergebnis erzielen, indem Sie with-Ausdrücke für Modifikationen nutzen, die im Wesentlichen eine neue Instanz des Datensatzes mit den gewünschten Änderungen zurückgeben.

using IronPdf;
using System;

public record PdfGeneratorRecord(string HtmlContent)
{
    public void GeneratePdf(string filePath)
    {
        var renderer = new ChromePdfRenderer();
        var pdfDocument = renderer.RenderHtmlAsPdf(this.HtmlContent);
        pdfDocument.SaveAs(filePath);
    }
}

class Program
{
    public static void Main(string[] args)
    {
        License.LicenseKey = "License-Key"; // Set your license key here

        var recordGenerator = new PdfGeneratorRecord("<h1>Hello, World from Record!</h1>");
        recordGenerator.GeneratePdf("RecordExample.pdf");
    }
}

Ausgabe:

Ausgegebenes PDF aus dem Datensatzbeispiel

Diese Beispiele veranschaulichen, wie man mit IronPDF sowohl mit einer Klasse als auch einem Record in C# eine PDF-Datei erstellt. Die Entscheidung zwischen der Verwendung einer Klasse oder eines Records hängt von Ihren spezifischen Bedürfnissen ab: Wenn Sie Objekte benötigen, die nach ihrer Erstellung modifiziert werden sollen, könnte eine Klasse geeigneter sein. Wenn Sie es mit Daten zu tun haben, die sich nach der Erstellung nicht ändern sollen, oder wenn Sie die syntaktische Einfachheit und Sicherheit der Unveränderlichkeit schätzen, könnte ein Record die bessere Wahl sein.

Abschluss

Abschließend bieten Klassen traditionelle objektorientierte Funktionen mit veränderlichem Zustand und referenzbasierter Gleichheit, während Records einen modernen Ansatz zur Definition unveränderlicher Datenstrukturen mit wertbasierter Gleichheit bieten.

Die Wahl zwischen der Verwendung einer Klasse oder eines Records sollte durch die spezifischen Anforderungen Ihrer Anwendung geleitet werden, wobei Faktoren wie die Notwendigkeit von Unveränderlichkeit, die Komplexität der Datenstruktur und die bevorzugte Methode zum Vergleich der Gleichheit zu berücksichtigen sind. Entdecken Sie die kostenlose Testversion von IronPDF für diejenigen, die PDF-Funktionalität in ihre .NET-Anwendungen integrieren möchten, mit Lizenzen ab $999.

Jacob Mellor, Chief Technology Officer @ Team Iron
Chief Technology Officer

Jacob Mellor ist Chief Technology Officer bei Iron Software und ein visionärer Ingenieur, der Pionierarbeit in der C# PDF-Technologie leistet. Als der ursprüngliche Entwickler hinter der Kern-Codebasis von Iron Software hat er die Produktarchitektur des Unternehmens seit seiner Gründung geprägt und es zusammen mit CEO Cameron Rimington in ein Unternehmen mit mehr als 50 Mitarbeitern verwandelt, das die NASA, Tesla und globale Regierungsbehörden beliefert.

...
Weiterlesen

Verwandte Artikel

Key in blue circle

Holen Sie sich sofort Ihren kostenlosen 30-Tage-Testschlüssel.

Your trial license will be sent to your email address

Keine Einschränkungen. 100 % freigeschaltet. Keine Kreditkarte.

bullet_checkedIhr Testlizenzschlüssel wurde Ihnen per E-Mail gesendet.Keine Einschränkungen. 100 % freigeschaltet. Keine Kreditkarte.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Buchen Sie Ihre kostenlose Live-Demo
Booking Badge

Von Millionen von Ingenieur*innen weltweit vertraut

Kundenlogos von Iron Software
Erhalten Sie Ihre unverbindliche Beratung
Füllen Sie das Formular unten aus oder senden Sie eine E-Mail an sales@ironsoftware.com
Ihre Daten werden immer vertraulich behandelt.
Von Millionen von Ingenieur*innen weltweit vertraut
Kundenlogos von Iron Software
Erhalten Sie sofort Ihren kostenlosen 30-Tage-Testschlüssel.
Ihr Testlizenzschlüssel wurde Ihnen per E-Mail gesendet.