C# 拡張メソッドのサンプル

C#の拡張メソッドのサンプルです。

目次

サンプル 拡張メソッドとは
  拡張メソッドのサンプル
  stringクラスに拡張メソッドを追加
  DateTimeクラスに拡張メソッドを追加
注意 拡張元クラスに同じシグネチャのメソッドができた場合

拡張メソッドとは

  • 既存のクラスに対して継承を使わずにメソッドを追加します。
  • 拡張メソッドの作り方は、静的クラスに静的メソッド(static)を作り、1つめの引数にthisと既存クラスのデータ型と変数をつけます。
  • 拡張メソッドを呼び出す側は、元のクラスのインスタンスを生成し、そのインスタンスで拡張メソッドを呼び出せます。

拡張メソッドのサンプル

using System;

class Test1
{
	static void Main()
	{
		Class1 c1 = new Class1(); //Class1のインスタンスを生成
		Console.WriteLine(c1.Add200(100)); // 300 Class1にないメソッドを実行
	}
}
public class Class1
{
	public int Add100(int num) // Class1のメソッド
	{
		return num + 100;
	}
}
public static class Class2
{
	public static int Add200(this Class1 c1, int num) //Class2のメソッド
	{
		return num + 200;
	}
}

7行目は、クラスのインスタンスを生成し8行目でメソッドを実行しています。
ただし8行目のAdd200メソッドはインスタンスを生成したClass1のメソッドではありません。
→拡張メソッドを使用しています。

18行目は、staticがあるので静的クラスです。
20行目は、staticがるので静的メソッドです。引数の1つめがthis,データ型,変数になっています。

 

stringクラスに拡張メソッドを追加

using System;

class Test1
{
	static void Main()
	{
		string str = "ABC";
		Console.WriteLine(str.AddStr("HELLO")); // ABC-HELLO
	}

}
public static class Class2
{
	public static string AddStr(this string s1, string str) //拡張メソッド
	{
		return s1 + "-" + str;
	}
}

8行目は、拡張メソッドのAddStrで文字列の末尾に文字列を追加します。

 

DateTimeクラスに拡張メソッドを追加

using System;

class Test1
{
	static void Main()
	{
		string str = DateTime.Now.AddStr("HELLO");
		Console.WriteLine(str); // 2022/05/17 11:29:40-HELLO
	}
}
public static class Class2
{
	public static string AddStr(this DateTime s1, string str) //拡張メソッド
	{
		return s1 + "-" + str;
	}
}

7行目は、拡張メソッドのAddStrで文字列の末尾に文字列を追加します。

拡張元クラスに同じシグネチャのメソッドができた場合

拡張元クラスに同じシグネチャのメソッドができた場合、拡張元のクラスのメソッドが実行されるので注意が必要です。

using System;

class Test1
{
	static void Main()
	{
		Class1 c1 = new Class1();
		Console.WriteLine(c1.Add200(100)); // 0 拡張元メソッドが実行される
	}
}
public class Class1
{
	public int Add200(int num)//拡張元のメソッドは100引く
	{
		return num - 100;
	}
}
public static class Class2
{
	public static int Add200(this Class1 c1, int num) //拡張メソッドは200足す
	{
		return num + 200;
	}
}

関連の記事

C#入門 クラスの仕組みとサンプル
C# オーバーライドのサンプル

△上に戻る