在实际环境中测试
在生产中测试无水印。
随时随地为您服务。
扩展方法是C#中的一个强大功能,允许您在不修改其源代码的情况下向现有类型添加新功能。它们在提高代码的可读性和可维护性方面非常有用。在本指南中,我们将探讨扩展方法的基础知识以及如何实现它们。
扩展方法是特殊的静态方法,可以像现有类型的实例方法一样调用。它们是一种方便的方法,可以在不改变原始源代码或继承类的情况下向现有类添加新方法。
要创建扩展方法,需要在静态类中定义一个静态方法。方法的第一个参数应为你要扩展的类型,并以this关键字作为前缀。这个特殊关键字告诉C#编译器这是一个扩展方法。
现在我们知道扩展方法是什么了,让我们来实现一个。假设你有一个字符串,你想要反转它。与其写一个单独的函数来做这件事,你可以为字符串类创建一个扩展方法。
首先,让我们创建一个新的静态类,称为StringExtensions。类名不重要,但通常的约定是使用被扩展的类型名称,然后是“Extensions”。在这个类里面,我们将定义一个静态方法,称为Reverse:
public static class StringExtensions
{
public static string Reverse(this string input)
{
char [] chars = input.ToCharArray();
Array.Reverse(chars);
return new string(chars);
}
}
public static class StringExtensions
{
public static string Reverse(this string input)
{
char [] chars = input.ToCharArray();
Array.Reverse(chars);
return new string(chars);
}
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
在这个例子中,我们创建了一个名为 Reverse 的公共静态字符串方法,并带有一个参数。字符串类型前的 this 关键字表明这是一个字符串类的扩展方法。
现在,让我们看看如何在我们的 Program 类中使用这个新的扩展方法:
class Program
{
static void Main(string [] args)
{
string example = "Hello, World!";
string reversed = example.Reverse();
Console.WriteLine(reversed); // !dlroW ,olleH
}
}
class Program
{
static void Main(string [] args)
{
string example = "Hello, World!";
string reversed = example.Reverse();
Console.WriteLine(reversed); // !dlroW ,olleH
}
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
请注意,我们不必创建StringExtensions类的实例。相反,我们直接在字符串实例上使用了Reverse方法,就好像它是一个实例方法。
扩展方法看起来像实例方法并且行为相似,但有几个重要的区别需要注意:
如果扩展类型具有与扩展方法相同签名的方法,实例方法将始终优先。只有在没有匹配的实例方法时才会调用扩展方法。
既然我们已经了解了 C# 中扩展方法的基础知识,那么让我们来看一些现实生活中的例子。
假设您想要计算字符串中的单词数量。您可以为字符串类创建一个 WordCount 扩展方法:
public static class StringExtensions
{
public static int WordCount(this string input)
{
return input.Split(new [] { ' ', '\t', '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries).Length;
}
}
public static class StringExtensions
{
public static int WordCount(this string input)
{
return input.Split(new [] { ' ', '\t', '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries).Length;
}
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
现在,您可以像这样轻松地计算字符串中的单词数:
string text = "Extension methods are awesome!";
int wordCount = text.WordCount();
Console.WriteLine($"The text has {wordCount} words."); // The text has 4 words.
string text = "Extension methods are awesome!";
int wordCount = text.WordCount();
Console.WriteLine($"The text has {wordCount} words."); // The text has 4 words.
Dim text As String = "Extension methods are awesome!"
Dim wordCount As Integer = text.WordCount()
Console.WriteLine($"The text has {wordCount} words.") ' The text has 4 words.
假设你有一组数字,并且你想计算中位数。你可以为 IEnumerable 创建一个扩展方法:
public static class EnumerableExtensions
{
public static double Median(this IEnumerable source)
{
int [] sorted = source.OrderBy(x => x).ToArray();
int count = sorted.Length;
if (count == 0)
{
throw new InvalidOperationException("The collection is empty.");
}
if (count % 2 == 0)
{
return (sorted [count / 2 - 1] + sorted [count / 2]) / 2.0;
}
else
{
return sorted [count / 2];
}
}
}
public static class EnumerableExtensions
{
public static double Median(this IEnumerable source)
{
int [] sorted = source.OrderBy(x => x).ToArray();
int count = sorted.Length;
if (count == 0)
{
throw new InvalidOperationException("The collection is empty.");
}
if (count % 2 == 0)
{
return (sorted [count / 2 - 1] + sorted [count / 2]) / 2.0;
}
else
{
return sorted [count / 2];
}
}
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
使用此扩展方法,您可以轻松找到集合的中值:
int [] numbers = { 5, 3, 9, 1, 4 };
double median = numbers.Median();
Console.WriteLine($"The median value is {median}."); // The median value is 4.
int [] numbers = { 5, 3, 9, 1, 4 };
double median = numbers.Median();
Console.WriteLine($"The median value is {median}."); // The median value is 4.
Dim numbers() As Integer = { 5, 3, 9, 1, 4 }
Dim median As Double = numbers.Median()
Console.WriteLine($"The median value is {median}.") ' The median value is 4.
假设您想查找某个日期的周的开始。您可以为 DateTime 结构创建一个扩展方法:
public static class DateTimeExtensions
{
public static DateTime StartOfWeek(this DateTime dt, DayOfWeek startOfWeek = DayOfWeek.Monday)
{
int diff = (7 + (dt.DayOfWeek - startOfWeek)) % 7;
return dt.AddDays(-1 * diff).Date;
}
}
public static class DateTimeExtensions
{
public static DateTime StartOfWeek(this DateTime dt, DayOfWeek startOfWeek = DayOfWeek.Monday)
{
int diff = (7 + (dt.DayOfWeek - startOfWeek)) % 7;
return dt.AddDays(-1 * diff).Date;
}
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
现在,您可以轻松查找任何日期的一周开始时间:
DateTime today = DateTime.Today;
DateTime startOfWeek = today.StartOfWeek();
Console.WriteLine($"The start of the week is {startOfWeek.ToShortDateString()}."); // The start of the week is 17/06/2024.
DateTime today = DateTime.Today;
DateTime startOfWeek = today.StartOfWeek();
Console.WriteLine($"The start of the week is {startOfWeek.ToShortDateString()}."); // The start of the week is 17/06/2024.
IRON VB CONVERTER ERROR developers@ironsoftware.com
在本节中,我们将介绍 IronPDF,这是一款行业领先的用于在 C# 中生成和处理 PDF 文件的库。我们还将看到如何利用扩展方法来创建更无缝且直观的体验,以便更好地使用此库。
IronPDF 将 HTML 转换为 PDF,保留内容在 Web 浏览器中显示时的布局和样式。该库可以处理来自文件、URL 和字符串的原始 HTML。以下是一个简单的概述:
using IronPdf;
class Program
{
static void Main(string [] args)
{
var renderer = new ChromePdfRenderer();
// 1. Convert HTML String to PDF
var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");
// 2. Convert HTML File to PDF
var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");
// 3. Convert URL to PDF
var url = "http://ironpdf.com"; // Specify the URL
var pdfFromUrl = renderer.RenderUrlAsPdf(url);
pdfFromUrl.SaveAs("URLToPDF.pdf");
}
}
using IronPdf;
class Program
{
static void Main(string [] args)
{
var renderer = new ChromePdfRenderer();
// 1. Convert HTML String to PDF
var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");
// 2. Convert HTML File to PDF
var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");
// 3. Convert URL to PDF
var url = "http://ironpdf.com"; // Specify the URL
var pdfFromUrl = renderer.RenderUrlAsPdf(url);
pdfFromUrl.SaveAs("URLToPDF.pdf");
}
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
在深入扩展方法之前,让我们看看如何使用IronPDF从HTML创建一个简单的PDF:
using IronPdf;
class Program
{
static void Main(string [] args)
{
var renderer = new ChromePdfRenderer();;
var PDF = renderer.RenderHtmlAsPdf("Hello, World!");
PDF.SaveAs("HelloWorld.PDF");
}
}
using IronPdf;
class Program
{
static void Main(string [] args)
{
var renderer = new ChromePdfRenderer();;
var PDF = renderer.RenderHtmlAsPdf("Hello, World!");
PDF.SaveAs("HelloWorld.PDF");
}
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
该代码片段创建了一个 PDF 文件,文本为 "你好,世界!"并将其保存到名为 "HelloWorld.PDF "的文件中。
现在,让我们探讨如何使用扩展方法来增强 IronPDF 的功能并使其更易于使用。例如,我们可以创建一个扩展方法,该方法采用字符串类的实例并直接从中生成 PDF。
public static class StringExtensions
{
public static void SaveAsPdf(this string htmlContent, string filePath)
{
var renderer = new ChromePdfRenderer();;
var PDF = renderer.RenderHtmlAsPdf(htmlContent);
PDF.SaveAs(filePath);
}
}
public static class StringExtensions
{
public static void SaveAsPdf(this string htmlContent, string filePath)
{
var renderer = new ChromePdfRenderer();;
var PDF = renderer.RenderHtmlAsPdf(htmlContent);
PDF.SaveAs(filePath);
}
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
有了这个扩展方法,我们现在可以直接从字符串生成 PDF:
string html = "Extension Methods and IronPDFGenerating PDFs has never been easier!";
html.SaveAsPdf("ExtensionMethodsAndIronPDF.PDF");
string html = "Extension Methods and IronPDFGenerating PDFs has never been easier!";
html.SaveAsPdf("ExtensionMethodsAndIronPDF.PDF");
Dim html As String = "Extension Methods and IronPDFGenerating PDFs has never been easier!"
html.SaveAsPdf("ExtensionMethodsAndIronPDF.PDF")
我们可以创建的另一个有用的扩展方法是从 URL 生成 PDF。我们可以扩展 Uri 类来实现这一点:
public static class UriExtensions
{
public static void SaveAsPdf(this Uri url, string filePath)
{
var renderer = new ChromePdfRenderer();;
var PDF = renderer.RenderUrlAsPdf(url.AbsoluteUri);
PDF.SaveAs(filePath);
}
}
public static class UriExtensions
{
public static void SaveAsPdf(this Uri url, string filePath)
{
var renderer = new ChromePdfRenderer();;
var PDF = renderer.RenderUrlAsPdf(url.AbsoluteUri);
PDF.SaveAs(filePath);
}
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
现在,我们可以通过这样的 URL 轻松生成 PDF:
Uri url = new Uri("https://www.ironpdf.com/");
url.SaveAsPdf("UrlToPdf.PDF");
Uri url = new Uri("https://www.ironpdf.com/");
url.SaveAsPdf("UrlToPdf.PDF");
Dim url As New Uri("https://www.ironpdf.com/")
url.SaveAsPdf("UrlToPdf.PDF")
我们探索了C#中扩展方法的概念,学习了如何使用静态方法和静态类实现它们,并通过各种类型的实际例子进行了演示。此外,我们介绍了IronPDF,这是一个用于生成和处理PDF文件的库。当你开始将扩展方法和IronPDF一起使用时,你会发现你的代码变得更加清晰、可读且更高效。
准备好使用IronPDF了吗?你可以从我们的 30 天免费试用开发端也是完全免费的,所以您可以真正了解它的性能。而且,如果您喜欢它,IronPDF 的起价仅为 $749欲获得更大折扣,请查看 Iron Suite 在这里,您可以以两款工具的价格获得Iron Software的全部九款工具。祝编程愉快。!