implicit と explicitについて調べたメモ

どんな機能か?

どちらも実装したクラスから、キャストを行う事が出来るようにする変換演算子。 違いとしては、「暗黙的なキャスト(implicit)」か「明示的なキャストが必要(explicit)」かの違い

サンプルソースコード

explicitを実装したクラス

public class ExplicitSample
    {
        public int a;

        public ExplicitSample()
        {
            a = 5;
        }

        public static explicit operator int (ExplicitSample sample)
        {
            return sample.a;
        }

    }

implicitを実装したクラス

public class ImplicitSample
    {
        public int b;
        public ImplicitSample()
        {
            b = 4;
        }

        public static implicit operator int (ImplicitSample sample)
        {
            return sample.b;
        }
    }

それぞれを使用したクラス On Unity

public class castSample : MonoBehaviour
    {

        // Use this for initialization
        void Start()
        {
            //明示的なキャストでの実装
            ExplicitSample a = new ExplicitSample();
            int b = (int)a;
            int f = a;//コンパイルエラー

            ImplicitSample c = new ImplicitSample();
            int d = c;
            int e = (int)c;//冗長といわれるが、これもコンパイルいける
            short g = c;//これはコンパイルエラー
        }
    }

まとめ

  • implicit と explicit はキャストを行うための 変換演算子
  • implicit は 暗黙的にキャストができる変換演算子
  • explicit は キャストの際に明示的にする必要がある変換演算子

参考したURL

ユーザー定義の変換演算子 - C# リファレンス | Microsoft Docs

C# の珍しいキーワード、implicit/explicit - maxfie1d のブログ