Quantcast
Channel: C#タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 8899

[C#]クラス作成時にメソッドチェインを使用する

$
0
0

結論から言うとBuilderパターン

メソッドチェインでつないで一行で設定を入れて、実際にほしいクラスを作成します。MQTTnetとかで使うやつです。
今回はただ一秒ごとにカウントアップするカウンタークラスを作成します。
使うときはこんな感じになります。

staticvoidMain(string[]args){varoption=newCounterOptionBuilder().Start(10).Duration(5).End(40).Build();varcountObject=newCounter(option);countObject.Start();}

作成するクラスは以下の3つ

  • Counterクラス
    • 実際に使いたいクラス
  • CounterOptrionsクラス
    • Counterクラスに設定する値が入ったクラス
  • CounterOptionBuilderクラス
    • CounterOptionBuilderクラスをメソッドチェインで作成するクラス

サンプルコード

次は実際にほしいクラスです。

classCounter{privatereadonlyCounterOptionsoption;publicCounter(CounterOptionsoption){this.option=option;}publicvoidStart(){varc=option.start;while(option.end>=c){Console.WriteLine($"counting...{c}");Thread.Sleep(1000);c+=option.duration;}}}

次がBuilderパターンの肝です。
Builderパターンではメソッドは自分を返します。return this;の部分です。
これによってメソッドチェインを実現します。

classCounterOptionBuilder{privatereadonlyCounterOptionsoptions=newCounterOptions();privateintstart;privateintend;privateintduration;publicCounterOptionBuilderStart(intvalue){start=value;returnthis;}publicCounterOptionBuilderEnd(intvalue){end=value;returnthis;}publicCounterOptionBuilderDuration(intvalue){duration=value;returnthis;}publicCounterOptionsBuild(){options.start=start;options.end=end;options.duration=duration;returnoptions;}}

次は設定したい項目をクラス化したものです。Builderパターンでは設定項目をクラスに分離することが多いです。

classCounterOptions{publicintstart{get;set;}publicintduration{get;set;}publicintend{get;set;}}

Viewing all articles
Browse latest Browse all 8899

Trending Articles