こんにちは。明月です。
この投稿はC#の拡張メソッドを使い方に関する説明です。
以前の投稿でC#のメソッド(関数)を使い方に関して説明したことがあります。
link - [C#] 9. 関数(Method)とオーバーロード、再帰呼び出し
関数というのはクラス内でデータを変更、処理する機能という文法です。
クラスを作成して関数を作って、クラスの外部から呼び出すことに関してはよく知っています。
でも、我々がプロジェクト内で作成したクラスではなく、.Net frameworkで提供するクラスや外部ライブラリから取得するクラスに関して関数を追加したい場合はどうしよう。
using System;
namespace Example
{
class Program
{
//Stringタイプを関数でintタイプに変換する関数
static int ConvertToIntFromString(String val, int def = -1)
{
try
{
// 変換
return Convert.ToInt32(val);
}
catch
{
// エラーが発生すると基本データをリターン(default: -1)
return def;
}
}
// 実行関数
static void Main(string[] args)
{
// stringタイプの値は1
var data = "1";
// stringからintタイプに変換
var ret = ConvertToIntFromString(data);
// ret変数のデータタイプ
Console.WriteLine("ret data type = " + ret.GetType());
// 値をコンソールに出力
Console.WriteLine("ret value = " + ret);
// 任意のキーを押してください
Console.WriteLine("Press Any key...");
Console.ReadLine();
}
}
}
上の例は基本的に関数生成と使う方法に関することです。
でも、もっとしやすくするためにConvertToIntFromString関数がStringクラスの関数みたいに設定したいです。
using System;
namespace Example
{
// 拡張関数を作成するためのstatic class生成
static class ExpendFunction
{
// 基本関数のタイプで始めのパラメータにthisキーワードを入れるとstringクラスの拡張メソッドになる。
//Stringタイプの関数をintタイプに変換する関数
public static int ConvertToIntFromString(this String val, int def = -1)
{
try
{
// 変換
return Convert.ToInt32(val);
}
catch
{
// エラーが発生すると基本データをリターン(default: -1)
return def;
}
}
}
class Program
{
// 実行関数
static void Main(string[] args)
{
// stringタイプの値は1
var data = "1";
// stringからintタイプに変換(拡張関数)
var ret = data.ConvertToIntFromString();
// ret変数のデータタイプ
Console.WriteLine("ret data type = " + ret.GetType());
// 値をコンソールに出力
Console.WriteLine("ret value = " + ret);
// 改行
Console.WriteLine();
// stringからintタイプに変換(一般関数式)
ret = ExpendFunction.ConvertToIntFromString(data);
// ret変数のデータタイプ
Console.WriteLine("ret data type = " + ret.GetType());
// 値をコンソールに出力
Console.WriteLine("ret value = " + ret);
// 任意のキーを押してください
Console.WriteLine("Press Any key...");
Console.ReadLine();
}
}
}
始めの例と差異は拡張関数をstatic classに関数を生成しなければならないです。
staticが付けたらプログラムが起動する時、一括的に読み込みますが、その時に既存のStringクラスに関数を追加する役割をするらしいです。
拡張関数はstaticで生成すること、始めのパラメータにthisを付けて該当のクラスの拡張関数になります。
使用方法はstringでの関数みたいに使えます。
Visual studioのインテリジェンス(自動完成機能)にも関数があるみたいに制御になります。
そして拡張関数で設定しても既存方法みたいに一般関数を呼び出すことにも使うこともできます。
一般プロジェクトで処理機能だけある関数の場合、普通はUtilやCommon、Defineのクラスを作成して管理します。
その方法が悪いことではないですが、このみたいに拡張関数で設定して置いたら可読性やソース整理することにすごく良いと思います。
ここまでC#の拡張メソッドを使い方に関する説明でした。
ご不明なところや間違いところがあればコメントしてください。
- [C#] 43. ストリーム(Stream)とバイナリ(byte[])、エンコード(Encoding)、そしてusingを使い方とIDisposableインターフェース2021/10/04 18:33:04
- [C#] 42. ファイルを扱い(IO)とファイルメタデータ(FileInfo)を使い方2021/10/01 20:10:21
- [C#] 41. Taskクラスとasync、awaitを使い方2021/10/01 18:59:14
- [C#] 40. Linqを利用した並列処理(Parallel)を使い方2020/05/13 17:37:13
- [C#] 39. lockキーワードとdeadlock(デッドロック)2019/07/24 00:57:35
- [C#] 38. ThreadPoolの使い方2019/07/23 00:05:40
- [C#] 37. スレッド(Thread)を使い方、Thread.Sleep関数を使い方2019/07/22 23:45:05
- [C#] 36. 拡張メソッドを使い方2019/07/22 23:30:17
- [C#] 35. 文字列クラス、StringとStringBuilderを使い方2019/07/22 23:15:42
- [C#] 34. 最上位クラス(Object クラス)2019/07/20 02:27:23
- [C#] 33. 匿名形式(Anonymous Types)を使い方2019/07/20 02:22:03
- [C#] 32. ジェネリックタイプ(Generic Type)を使い方2019/07/18 22:50:16
- [C#] 31. アトリビュート(Attribute)を使い方2019/07/18 20:22:16
- [C#] 30. Linq関数式を使う方法2019/07/17 23:06:42
- [C#] 29. Linqクエリ式を使い方2019/07/17 20:57:00
- check2024/04/10 19:03:53
- [Java] 64.Spring bootとReactを連結する方法(Buildする方法)2022/03/25 21:02:18
- [Javascript] Node.jsをインストールしてReactを使う方法2022/03/23 18:01:34
- [Java] 63. Spring bootでcronスケジューラとComponentアノテーション2022/03/16 18:57:30
- [Java] 62. Spring bootでWeb-Filterを設定する方法(Spring Security)2022/03/15 22:16:37
- [Java] JWT(Json Web Token)を発行、確認する方法2022/03/14 19:12:58
- [Java] 61. Spring bootでRedisデータベースを利用してセッションクラスタリング設定する方法2022/03/01 18:20:52
- [Java] 60. Spring bootでApacheの連結とロードバランシングを設定する方法2022/02/28 18:45:48
- [Java] 59. Spring bootのJPAでEntityManagerを使い方2022/02/25 18:27:48
- [Java] 58. EclipseでSpring bootのJPAを設定する方法2022/02/23 18:11:10
- [Java] 57. EclipseでSpring bootを設定する方法2022/02/22 19:04:49
- [Python] Redisデータベースに接続して使い方2022/02/21 18:23:49
- [Java] Redisデータベースを接続して使い方(Jedisライブラリ)2022/02/16 18:13:17
- [C#] Redisのデータベースを接続して使い方2022/02/15 18:46:09
- [CentOS] Redisデータベースをインストールする方法とコマンドを使い方2022/02/14 18:33:07