渋谷ほととぎす通信

完全趣味でやってるUnityメモ。説明できないところを説明できるようにするための個人ブログ。昨日の自分より少しでも大きくなれるように。。。 ※所属団体とは一切関係がありません

良い使い所求むC#の変換演算子


f:id:esakun:20150730215258g:plain

C#にはimplicit変換演算子というものがあります。

これを使用すると型をキャストすることなく変換できます。


テストコードはコチラ

  • Hoge型int型
  • int型 から Hoge型

キャストすることなく変換しています。


以下のimplicit operatorを記述することでHogeをint型に変換出来るようになります。

// Hoge -> int
public static implicit operator int (Hoge value)
{
    return value.m_num;
}


また以下のように記述することでint型からHogeを生成することが出来ます。

// int -> Hoge
public static implicit operator Hoge (int value)
{
    return new Hoge (value);
}


ちなみにUnityのソースではRenderTargetIdentifier型で使われています。

public static implicit operator RenderTargetIdentifier (RenderBuffer buf) {
    return new RenderTargetIdentifier (buf, 0, CubemapFace.Unknown, 0);
}

public static implicit operator RenderTargetIdentifier (Texture tex) {
    return new RenderTargetIdentifier (tex);
}

public static implicit operator RenderTargetIdentifier (int nameID) {
    return new RenderTargetIdentifier (nameID);
}

public static implicit operator RenderTargetIdentifier (string name) {
    return new RenderTargetIdentifier (name);
}

public static implicit operator RenderTargetIdentifier (BuiltinRenderTextureType type) {
    return new RenderTargetIdentifier (type);
}

まとめ

変換演算子を使用することで、コード量をかなり減らすことができそうです。

しかし、コードの読みやすさの見地から考えると、後から読んだ人にとっては混乱の種になりそうな気がするため、この文法を採用するかどうかは微妙なところです。

知っていて全く損はないという所でしょうか。
良い使い所を教えてください。

参考

最後に

明けましておめでとうございます。今年も粛々更新していこうと思います。