Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

C#で貧者の型クラス(poor man's type class)

More than 5 years have passed since last update.

今日はScala の implicit parameter は型クラスの一種とはどういうことなのかの例をC#で書いてみます。と言っても、C#には暗黙引数と同等の機能は備わっていないので、明示的に引数を取るしかありません。

型クラス。

public abstract class FlipFlapper<T>
{
    public abstract T DoFlipFlap(T x);
}

型クラスを利用する関数。

private static T FlipFlap<T>(T x, FlipFlapper<T> flipFlapper)
{
    return flipFlapper.DoFlipFlap(x);
}

型クラスの実体。

public class IntFlipFlapper : FlipFlapper<int>
{
    public static IntFlipFlapper Instance = new IntFlipFlapper();

    public override int DoFlipFlap(int x)
    {
        return -x;
    }
}

public class StringFlipFlapper : FlipFlapper<string>
{
    public static StringFlipFlapper Instance = new StringFlipFlapper();

    public override string DoFlipFlap(string x)
    {
        char[] chars = x.ToCharArray();
        Array.Reverse(chars);
        return new string(chars);
    }
}

型クラスを利用する関数の呼び出し。

FlipFlap(1, IntFlipFlapper.Instance);
FlipFlap("string", StringFlipFlapper.Instance);

毎回明示的に引数を渡さなければならないのは不便です。何とかしてC#で暗黙引数を実現できないか色々考えましたが、難しそうでした。

pizyumi
トランスジェンダー。性同一性障害(MtF)診断済。睾丸摘出済。歌舞伎町のニューハーフヘルスに在籍していた元風俗嬢です。風俗嬢をしたら精神がボロボロになってどん底です。プログラミング歴20年超。プログラマ。ITエンジニア。投資家。当面は趣味の形式化数学の記事を書きます。
http://info-i.net/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away