【C#】object型をキャスト(変換)する方法

object型とは

「object型」とは、すべてのデータ型の基礎となる汎用的なデータ型です

すべてのデータ型の値が「object型」の変数に代入可能です。

■公式ドキュメント
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/builtin-types/reference-types#the-object-type

https://docs.microsoft.com/ja-jp/dotnet/api/system.object?view=net-5.0

 

objectをキャストする

キャストには、アップキャストダウンキャストと呼ばれるものがあります。

アップキャスト

C#ではobjectのアップキャストができます。

アップキャストとは、基底クラス(スーパークラス)の変数に派生クラス(サブクラス)の変数を渡すことです

つまり、「子クラス→親クラス」という構図で変数が渡されます。

using System;

namespace c_upcast
{
    class SuperClass // 親クラス
    {
        public string name;
    }

    class SubClass : SuperClass // 子クラス(SuperClassを継承)
    {
        static void Main(string[] args)
        {
            SubClass subClass = new SubClass();

            subClass.name = "genta";

            object obj = (object)subClass; // object型にキャスト

            SuperClass superClass = (SuperClass)obj; // objectのアップキャスト


            Console.WriteLine(subClass.name);
            Console.WriteLine(superClass.name);
           
        }
    }
}

実行結果:

genta
genta

サブクラス(子クラス)をobject型にキャストし、objectをスーパークラス(親クラス)にアップキャストしています。

 

ダウンキャスト

C#ではobjectのダウンキャストができます。

ダウンキャストとは、派生クラス(サブクラス)の変数に基底クラス(スーパークラス)の変数を渡すことです

親クラス→子クラス」という構図で変数が渡されます。

この場合、アップキャストしたものをダウンキャストしなければキャストは成功しません

using System;

namespace c_upcast
{
    class SuperClass // 親クラス
    {
        public string name;
    }

    class SubClass : SuperClass // 子クラス(SuperClassを継承)
    {
        static void Main(string[] args)
        {
            SubClass subClass = new SubClass();

            subClass.name = "genta";

            object obj = (object)subClass; // object型にキャスト

            SuperClass superClass = (SuperClass)obj; // objectのアップキャスト

            object obj2 = (object)superClass; // object型にキャスト

            SubClass subClass2 = (SubClass)obj2; // objectのダウンキャスト

            Console.WriteLine(subClass.name);
            Console.WriteLine(superClass.name);
            Console.WriteLine(subClass2.name);

        }
    }
}

実行結果:

genta
genta
genta

上記のように、アップキャストしたものをダウンキャストする必要があります。

 

as演算子

C#には「as演算子」があり、値型のキャストはできないものの、参照型のキャストができます。

詳しくは、下記の記事を参考ください。

【C#】is演算子とas演算子とは

2021.05.11

 

おすすめ・参考書籍

■C#を学習し始めた方向け
やさしいC 第3版 (「やさしい」シリーズ)

1週間でCの基礎が学べる本

確かな力が身につくC「超」入門 第2版 (Informatics&IDEA)

■C#をある程度学習した方向け
基礎からしっかり学ぶCの教科書 改訂新版 (マイクロソフト関連書)

独習C 新版

Effective C 6.0/7.0