はなちるのマイノート

Unityをメインとした技術ブログ。自分らしくまったりやっていきたいと思いますー!

【C#】ジェネリッククラスのインスタンス化をするときに一行が長くなりすぎる問題の対処法

はじめに

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の方がいいのかなと思い長いなと感じた時は利用しています。

もしこっちがオススメ等ありましたらコメント等で教えてくださると嬉しいです。

ではまた。