.NET ヘルプ

C#拡張メソッド(開発者向けの使用方法)

公開済み 2024年8月15日
共有:

拡張メソッドは、既存の型のソースコードを変更せずに新しい機能を追加することができるC#の強力な機能です。 それらはコードをより読みやすく、保守しやすくするのに非常に役立ちます。 このガイドでは、拡張メソッドの基本とその実装方法について説明します。

拡張メソッドとは何ですか?

拡張メソッドは、既存の型のインスタンスメソッドとして呼び出すことができる特別な静的メソッドです。 元のソースコードを変更したりクラスを継承したりすることなく、既存のクラスに新しいメソッドを追加する便利な方法です。

拡張メソッドを作成するには、静的クラス内に静的メソッドを定義する必要があります。 メソッドの最初のパラメーターは、thisキーワードを前置した、拡張したい型である必要があります。 この特別なキーワードは、C#コンパイラにこれが拡張メソッドであることを伝えます。

C#で拡張メソッドを実装する

拡張メソッドが何であるかを理解したところで、実装してみましょう。 文字列を逆にしたいと想像してください。 これを行うために別の関数を書く代わりに、stringクラスの拡張メソッドを作成することができます。

まず、新しい静的クラス「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);
   }
}
Public Module StringExtensions
   <System.Runtime.CompilerServices.Extension> _
   Public Function Reverse(ByVal input As String) As String
	   Dim chars() As Char = input.ToCharArray()
	   Array.Reverse(chars)
	   Return New String(chars)
   End Function
End Module
VB   C#

この例では、単一のパラメーターを持つReverseという名前のpublic static stringメソッドを作成しました。 この this キーワードは、string 型の前にあることで、これは string クラスの拡張メソッドであることを示しています。

では、この新しい拡張メソッドを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
   }
}
Friend Class Program
   Shared Sub Main(ByVal args() As String)
	   Dim example As String = "Hello, World!"
	   Dim reversed As String = example.Reverse()
	   Console.WriteLine(reversed) ' !dlroW ,olleH
   End Sub
End Class
VB   C#

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
VB   C#

次のように、文字列内の単語数を簡単に数えることができます:

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.
VB   C#

IEnumerable エクステンションメソッド メディアン

数値のコレクションがあり、その中央値を計算したいとします。 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
VB   C#

この拡張メソッドを使用すると、コレクションの中央値を簡単に見つけることができます。

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.
VB   C#

DateTime 拡張メソッド StartOfWeek

特定の日付の週の始まりを見つけたいとします。 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
VB   C#

これで、任意の日付の週の始まりを簡単に見つけることができます。

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
VB   C#

IronPDFと拡張メソッドを使用してPDFを生成する

このセクションでは、C#でPDFファイルを生成および操作するための業界最高水準のライブラリであるIronPDFをご紹介します。 また、このライブラリを使用する際に、拡張メソッドを活用してよりシームレスで直感的な体験を作り出す方法についても見ていきます。

IronPDFは、HTMLをPDFに変換する際、ウェブブラウザに表示されるのと同じようにレイアウトとスタイルを保持します。 ライブラリは、ファイル、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");
   }
}
Imports IronPdf

Friend Class Program
   Shared Sub Main(ByVal args() As String)
	   Dim renderer = New ChromePdfRenderer()

	   ' 1. Convert HTML String to PDF
	   Dim htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>"
	   Dim pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent)
	   pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf")

	   ' 2. Convert HTML File to PDF
	   Dim htmlFilePath = "path_to_your_html_file.html" ' Specify the path to your HTML file
	   Dim pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath)
	   pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf")

	   ' 3. Convert URL to PDF
	   Dim url = "http://ironpdf.com" ' Specify the URL
	   Dim pdfFromUrl = renderer.RenderUrlAsPdf(url)
	   pdfFromUrl.SaveAs("URLToPDF.pdf")
   End Sub
End Class
VB   C#

シンプルなPDFを作成する

拡張メソッドに入る前に、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");
   }
}
Imports IronPdf

Friend Class Program
   Shared Sub Main(ByVal args() As String)
	   Dim renderer = New ChromePdfRenderer()
	   Dim PDF = renderer.RenderHtmlAsPdf("Hello, World!")
	   PDF.SaveAs("HelloWorld.PDF")
   End Sub
End Class
VB   C#

このコードスニペットは、"Hello, World"というテキストが含まれたPDFを作成します。!「HelloWorld.PDF」という名前のファイルに保存します。

IronPDFの拡張メソッド

さて、拡張メソッドを使用して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
VB   C#

この拡張メソッドを使用すると、文字列から直接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")
VB   C#

URLから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
VB   C#

さて、このように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")
VB   C#

結論

そして、見事に – 私たちはC#の拡張メソッドの概念を探求し、静的メソッドと静的クラスを使用してそれらを実装する方法を学び、さまざまなタイプの実例を使用しました。さらに、PDFファイルの生成と操作を行うためのライブラリであるIronPDFを紹介しました。 拡張メソッドとIronPDFを一緒に使用し始めると、コードがどれだけクリーンで読みやすく、効率的になるかがわかります。

IronPDFを使ってみませんか? 以下の文から始めることができます。IronPDFの30日間無料トライアル. 開発目的での使用も完全に無料なので、その機能を十分に確認できます。 そして、気に入った場合は、IronPDFはわずかから始まりますIronPDF ライセンスの詳細 $749さらにお得なIronソフトウェアスイートの購入オプションここで、9つのIron Softwareツールすべてを2つの価格で手に入れることができます。 コーディングを楽しんでください!

Csharp Extension Methods 1 related to 結論

< 以前
C#におけるTry/Catch(開発者向けの仕組み)
次へ >
C# 使用方法 (開発者のための動作説明)