はじめに
C#
のジェネリッククラスをインスタンス化するときに結構長くなってしまうのはあるあるな気がします。
private static void Main(string[] args) { // 一行が長くなりがち・・・ var sample = new Sample<List<int>, KeyValuePair<bool, int>>(); } public class Sample<TKey, TValue>{}
これの対処法について考えてみました。
対処法1. 継承したクラスを作成する
まず最初に思いついた方法はジェネリッククラスの子クラスを作成して、それを利用するパターンです。
private static void Main(string[] args) { // ジェネリックを書く必要がなくなる var sample = new SampleAdapter(); } public class Sample<TKey, TValue> {} // 対象のクラスを継承したクラスを作成 public class SampleAdapter : Sample<List<int>, KeyValuePair<bool, int>>{}
これはいわゆる継承を利用したAdapter
パターンの一種とでも言えるでしょうか。
何かしらの変換を行なっている訳ではないのでAdapter
パターンとは違うのかもですが。(よく分かってない)
対処法2. using エイリアスを利用する
using
エイリアスを利用することでも短くすることができます。
名前空間 - C# によるプログラミング入門 | ++C++; // 未確認飛行 C
using Sample = Sample<System.Collections.Generic.List<int>, System.Collections.Generic.KeyValuePair<bool, int>>; internal static class Program { private static void Main(string[] args) { // ジェネリックを書く必要がなくなる var sample = new Sample(); } } public class Sample<TKey, TValue> {}
さいごに
継承を使った場合は型が変わってしまいますが、using
エイリアスはただ単に文字列置換しているだけのイメージなので挙動に少し違いはあります。
私はよく対処法1を行なっていたのですが、最近は対処法2の方がいいのかなと思い長いなと感じた時は利用しています。
もしこっちがオススメ等ありましたらコメント等で教えてくださると嬉しいです。
ではまた。