渋谷ほととぎす通信

「Unityをわかりやすく」初心者のためのゲーム作りブログ

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

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

こんにちは、Unityエンジニアのオオバです。

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

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

テストコードはコチラ

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

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

Convert.cs · GitHub

以下の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);  
}

👉DOTweenの教科書を読んでUnityアニメーションをプログラミングしてみよう!

まとめ

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

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

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

参考

最後に

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

オススメ記事
検証環境
  • Unity2017.3.0f3