在實際環境中測試
在生產環境中測試無浮水印。
在任何需要的地方都能運作。
擴充方法是 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,與在網頁瀏覽器中呈現的效果相同。該庫可以處理來自文件、URLs 和字符串的原始 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
以下程式碼片段建立了一個包含文字 "Hello, World" 的 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")
另一個有用的擴展方法是從網址生成 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,一個用於生成和操作C#中PDF文件的庫。當你開始將擴展方法和IronPDF結合使用時,你會發現你的代碼變得多麼乾淨、可讀且高效。
準備好開始使用IronPDF了嗎?你可以從我們的 30 天免費試用它也可以完全免費用於開發目的,讓您可以真正了解它的性能。如果您喜歡所見,IronPDF的價格低至 $749欲享受更多優惠,請查看 Iron Suite 在這裡,您可以以兩個的價格獲得全部九個Iron Software工具。祝編程愉快!