Test in einer Live-Umgebung
Test in der Produktion ohne Wasserzeichen.
Funktioniert überall, wo Sie es brauchen.
In C# wird die virtuelles Schlüsselwort ist ein zentrales Konzept in der objektorientierten Programmierung, das den Polymorphismus erleichtert und es Entwicklern ermöglicht, Methoden in abgeleiteten Klassen zu überschreiben. Wenn dieses Schlüsselwort auf eine Klassenmethode, eine Eigenschaft oder ein Ereignis angewandt wird, zeigt es an, dass das Verhalten der Entität von einer abgeleiteten Klasse mit dem Schlüsselwort override geändert werden kann. In diesem Tutorial lernen wir das virtuelle C#-Schlüsselwort und IronPDF-Bibliothek. Lassen Sie uns direkt in die Funktionsweise eintauchen und anhand von praktischen Beispielen sehen, wie es funktioniert.
Im Kern ist eine virtuelle Methode eine Basisklassenmethode, die es abgeleiteten Klassen ermöglicht, eine spezifische Implementierung für Methoden bereitzustellen, die bereits in der Basisklasse definiert sind.
Das virtuelle Schlüsselwort in C# kennzeichnet eine Methode, eine Eigenschaft oder ein Ereignis als virtuell und signalisiert, dass es in jeder Klasse, die davon erbt, überschrieben werden kann. Im folgenden Beispiel wird eine Basisklasse Shape mit einer virtuellen Methode Area definiert:
public class Shape
{
public virtual double Area()
{
return 0; // Default implementation, returns 0
}
}
public class Shape
{
public virtual double Area()
{
return 0; // Default implementation, returns 0
}
}
Public Class Shape
Public Overridable Function Area() As Double
Return 0 ' Default implementation, returns 0
End Function
End Class
Abgeleitete Klassen können diese virtuellen Methoden außer Kraft setzen, um ihre eigene Implementierung bereitzustellen, die auf die spezifischen Anforderungen der abgeleiteten Klasse zugeschnitten ist. Mit dem Schlüsselwort override erstellen wir eine Klasse Circle, die von Shape abgeleitet ist und ihre eigene Version der Methode Area bereitstellt:
public class Circle : Shape
{
public double Radius { get; set; }
public Circle(double radius)
{
Radius = radius;
}
public override double Area()
{
return Math.PI * Radius * Radius; // Own implementation for circle area
}
}
public class Circle : Shape
{
public double Radius { get; set; }
public Circle(double radius)
{
Radius = radius;
}
public override double Area()
{
return Math.PI * Radius * Radius; // Own implementation for circle area
}
}
Public Class Circle
Inherits Shape
Public Property Radius() As Double
Public Sub New(ByVal radius As Double)
Me.Radius = radius
End Sub
Public Overrides Function Area() As Double
Return Math.PI * Radius * Radius ' Own implementation for circle area
End Function
End Class
Im obigen Code bietet die Klasse Circle ihre eigene Implementierung der Methode Area, mit der die Fläche eines Kreises berechnet wird. Dies zeigt, wie leistungsfähig virtuelle Methoden in der Polymorphie sind.
Es ist wichtig zu beachten, dass nicht alle Methoden virtuell sein müssen oder sollten. Eine nicht-virtuelle Methode ist so definiert, dass sie in abgeleiteten Klassen nicht überschrieben werden kann, d. h. die ursprüngliche Implementierung bleibt unverändert und wird von allen Klassen verwendet, die von ihr erben. Dies ist nützlich, wenn eine Basisklasse eine Standardimplementierung bietet, die nicht geändert werden sollte.
Lassen Sie uns diese Konzepte in einem praktischen Szenario anwenden. Betrachten Sie das folgende Programm, das unsere Klassen Form und Kreis verwendet:
public class Program
{
public static void Main(string [] args)
{
Shape myShape = new Shape();
Shape myCircle = new Circle(5);
Console.WriteLine($"Shape area: {myShape.Area()}");
Console.WriteLine($"Circle area: {myCircle.Area()}");
}
}
public class Program
{
public static void Main(string [] args)
{
Shape myShape = new Shape();
Shape myCircle = new Circle(5);
Console.WriteLine($"Shape area: {myShape.Area()}");
Console.WriteLine($"Circle area: {myCircle.Area()}");
}
}
Public Class Program
Public Shared Sub Main(ByVal args() As String)
Dim myShape As New Shape()
Dim myCircle As Shape = New Circle(5)
Console.WriteLine($"Shape area: {myShape.Area()}")
Console.WriteLine($"Circle area: {myCircle.Area()}")
End Sub
End Class
Das obige Beispielprogramm demonstriert Polymorphismus in Aktion und das Wesen der virtuellen Funktion. Obwohl myCircle als Shape deklariert ist, ruft es die überschriebene Area-Methode der Klasse Circle auf, was den dynamischen Dispatch-Mechanismus verdeutlicht, der durch die Schlüsselwörter virtual und override ermöglicht wird.
Abstrakte Methoden gehen einen Schritt weiter und werden in abstrakten Klassen verwendet. Eine abstrakte Methode ist eine Methode, die in der Basisklasse ohne Implementierung deklariert ist und in abgeleiteten Klassen überschrieben werden muss. Sie zwingt abgeleitete Klassen dazu, eine Implementierung für die abstrakte Methode bereitzustellen, um eine einheitliche Schnittstelle zu gewährleisten und gleichzeitig ein individuelles Verhalten in jeder abgeleiteten Klasse zu ermöglichen.
Es ist auch wichtig, den Unterschied zwischen Methodenüberladung und Methodenüberschreibung zu verstehen. Das Überladen von Methoden erfolgt innerhalb derselben Klasse und ermöglicht es, dass mehrere Methoden denselben Namen, aber unterschiedliche Parameter haben. Die Überschreibung von Methoden, die durch die Schlüsselwörter virtual und override erleichtert wird, ermöglicht es einer abgeleiteten Klasse, eine andere Implementierung für eine in der Basisklasse definierte Methode bereitzustellen.
Neben Methoden können auch Eigenschaften und Ereignisse virtuell sein. Dadurch können abgeleitete Klassen benutzerdefinierte Getter, Setter und Event-Handler bereitstellen, was die Flexibilität von Klassenhierarchien weiter erhöht.
IronPDF ist eine umfassende Bibliothek für C#-Entwickler, um PDF-Dokumente direkt in .NET-Anwendungen zu erzeugen, zu bearbeiten und darzustellen. Es bietet eine intuitive API, die die arbeiten mit PDF-Dateiensie hilft Entwicklern bei der Erstellung, Bearbeitung und Konvertierung von PDF-Dateien, ohne dass sie die komplexe Struktur von PDF-Dokumenten verstehen oder auf externe Software zurückgreifen müssen. IronPDF integriert sich nahtlos in die objektorientierten Funktionen der Sprache, einschließlich der Verwendung des virtuellen Schlüsselworts, um anpassbare PDF-Verarbeitungsfunktionen bereitzustellen.
Die Verwendung des virtuellen Schlüsselworts mit IronPDF ermöglicht es Entwicklern, die Funktionalität der IronPDF-Klassen innerhalb ihrer Anwendungen zu erweitern. Durch die Definition von Basisklassen mit virtuellen Methoden, die sich auf die PDF-Erzeugung oder -Bearbeitung beziehen, können Entwickler abgeleitete Klassen erstellen, die diese Methoden außer Kraft setzen, um das PDF-Verarbeitungsverhalten an spezifische Anforderungen anzupassen.
Stellen Sie sich vor, Sie haben eine Basisklasse, die IronPDF zum Rendern von PDFs aus HTML-Strings verwendet. Indem Sie die Rendering-Methode als virtuell markieren, erlauben Sie abgeleiteten Klassen, den Rendering-Prozess zu verändern oder zu erweitern. Hier ist ein einfaches Beispiel:
public class BasicPdfRenderer
{
// Virtual method allowing customization in derived classes
public virtual byte [] RenderHtmlToPdf(string htmlContent)
{
// Use IronPDF to render PDF from HTML
var renderer = new IronPdf.ChromePdfRenderer();
var pdfDocument = renderer.RenderHtmlAsPdf(htmlContent);
return pdfDocument.BinaryData;
}
}
public class CustomPdfRenderer : BasicPdfRenderer
{
// Overriding the base class method to implement custom rendering settings
public override byte [] RenderHtmlToPdf(string htmlContent)
{
var renderer = new IronPdf.ChromePdfRenderer();
var pdfDocument = renderer.RenderHtmlAsPdf(htmlContent);
// Apply a prominent watermark to the PDF document
pdfDocument.ApplyWatermark("<h2 style='color:red; font-size: 60px; opacity: 0.5; text-shadow: 2px 2px 5px grey;'>SAMPLE</h2>",
30,
IronPdf.Editing.VerticalAlignment.Middle,
IronPdf.Editing.HorizontalAlignment.Center);
// Return the binary data of the PDF document
return pdfDocument.BinaryData;
}
}
class Program
{
static void Main(string [] args)
{
License.LicenseKey = "License-Key";
// HTML content to be converted to PDF
string htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a simple PDF document generated from HTML.</p>";
// Create an instance of CustomPdfRenderer
CustomPdfRenderer renderer = new CustomPdfRenderer();
// Call RenderHtmlToPdf method to generate PDF binary data
byte [] pdfData = renderer.RenderHtmlToPdf(htmlContent);
// Specify the file path to save the PDF
string filePath = "f:\\CustomRenderedPdf.pdf";
// Save the binary data to a file
File.WriteAllBytes(filePath, pdfData);
Console.WriteLine($"PDF generated and saved to {filePath}");
}
}
public class BasicPdfRenderer
{
// Virtual method allowing customization in derived classes
public virtual byte [] RenderHtmlToPdf(string htmlContent)
{
// Use IronPDF to render PDF from HTML
var renderer = new IronPdf.ChromePdfRenderer();
var pdfDocument = renderer.RenderHtmlAsPdf(htmlContent);
return pdfDocument.BinaryData;
}
}
public class CustomPdfRenderer : BasicPdfRenderer
{
// Overriding the base class method to implement custom rendering settings
public override byte [] RenderHtmlToPdf(string htmlContent)
{
var renderer = new IronPdf.ChromePdfRenderer();
var pdfDocument = renderer.RenderHtmlAsPdf(htmlContent);
// Apply a prominent watermark to the PDF document
pdfDocument.ApplyWatermark("<h2 style='color:red; font-size: 60px; opacity: 0.5; text-shadow: 2px 2px 5px grey;'>SAMPLE</h2>",
30,
IronPdf.Editing.VerticalAlignment.Middle,
IronPdf.Editing.HorizontalAlignment.Center);
// Return the binary data of the PDF document
return pdfDocument.BinaryData;
}
}
class Program
{
static void Main(string [] args)
{
License.LicenseKey = "License-Key";
// HTML content to be converted to PDF
string htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a simple PDF document generated from HTML.</p>";
// Create an instance of CustomPdfRenderer
CustomPdfRenderer renderer = new CustomPdfRenderer();
// Call RenderHtmlToPdf method to generate PDF binary data
byte [] pdfData = renderer.RenderHtmlToPdf(htmlContent);
// Specify the file path to save the PDF
string filePath = "f:\\CustomRenderedPdf.pdf";
// Save the binary data to a file
File.WriteAllBytes(filePath, pdfData);
Console.WriteLine($"PDF generated and saved to {filePath}");
}
}
Public Class BasicPdfRenderer
' Virtual method allowing customization in derived classes
Public Overridable Function RenderHtmlToPdf(ByVal htmlContent As String) As Byte()
' Use IronPDF to render PDF from HTML
Dim renderer = New IronPdf.ChromePdfRenderer()
Dim pdfDocument = renderer.RenderHtmlAsPdf(htmlContent)
Return pdfDocument.BinaryData
End Function
End Class
Public Class CustomPdfRenderer
Inherits BasicPdfRenderer
' Overriding the base class method to implement custom rendering settings
Public Overrides Function RenderHtmlToPdf(ByVal htmlContent As String) As Byte()
Dim renderer = New IronPdf.ChromePdfRenderer()
Dim pdfDocument = renderer.RenderHtmlAsPdf(htmlContent)
' Apply a prominent watermark to the PDF document
pdfDocument.ApplyWatermark("<h2 style='color:red; font-size: 60px; opacity: 0.5; text-shadow: 2px 2px 5px grey;'>SAMPLE</h2>", 30, IronPdf.Editing.VerticalAlignment.Middle, IronPdf.Editing.HorizontalAlignment.Center)
' Return the binary data of the PDF document
Return pdfDocument.BinaryData
End Function
End Class
Friend Class Program
Shared Sub Main(ByVal args() As String)
License.LicenseKey = "License-Key"
' HTML content to be converted to PDF
Dim htmlContent As String = "<h1>Hello, IronPDF!</h1><p>This is a simple PDF document generated from HTML.</p>"
' Create an instance of CustomPdfRenderer
Dim renderer As New CustomPdfRenderer()
' Call RenderHtmlToPdf method to generate PDF binary data
Dim pdfData() As Byte = renderer.RenderHtmlToPdf(htmlContent)
' Specify the file path to save the PDF
Dim filePath As String = "f:\CustomRenderedPdf.pdf"
' Save the binary data to a file
File.WriteAllBytes(filePath, pdfData)
Console.WriteLine($"PDF generated and saved to {filePath}")
End Sub
End Class
Wir verwenden IronPDF innerhalb einer BasicPdfRenderer-Klasse, um HTML in PDF zu konvertieren, und markieren seine RenderHtmlToPdf-Methode als virtuell, um Anpassungen zu ermöglichen. Die Klasse CustomPdfRenderer, die von BasicPdfRenderer abgeleitet ist, überschreibt diese Methode nicht nur, um die Konvertierung durchzuführen, sondern auch, um eine deutliche, große, rote wasserzeichen in der generierten PDF-Datei.
Es handelt sich um die von IronPDF erzeugte PDF-Datei:
Das virtuelle Schlüsselwort in C# ist ein Eckpfeiler der objektorientierten Programmierung und ermöglicht Polymorphismus und dynamischen Versand. Indem abgeleitete Klassen spezifische Implementierungen von Methoden, Eigenschaften und Ereignissen bereitstellen können, die in Basisklassen definiert sind, ermöglicht es Entwicklern, flexible und wiederverwendbare Codestrukturen zu erstellen. Durch praktische Beispiele und das Verständnis der Beziehung zwischen virtuellen Methoden, Override-Mechanismen und Klassenhierarchien können Entwickler diese Konzepte bei der Erstellung robuster Anwendungen effektiv nutzen. Darüber hinaus würden diese Konzepte auch den Entwicklern helfen, IronPDF effizienter in ihren Anwendungen zu nutzen. Sie können IronPDF testen, ohne etwas zu bezahlen, indem Sie die kostenloser Test kostet $749 und aufwärts.
9 .NET API-Produkte für Ihre Bürodokumente