C#
 Computer >> コンピューター >  >> プログラミング >> C#

C# .NETのすべてのデータ型の基本クラスとは?Objectクラスとボックス化を解説

C# .NETにおけるすべてのデータ型の基本クラス

C# .NETにおいて、すべてのデータ型の基本クラスとなるのはObjectです。Object型は、C#の共通型システム(CTS:Common Type System)におけるすべてのデータ型の最終的な基底クラスとして位置づけられており、objectSystem.Objectクラスのエイリアス(別名)です。

つまり、intやdoubleなどの値型、stringや独自に定義したクラスなどの参照型を問わず、すべての型は暗黙的にSystem.Objectから派生しています。そのため、どのようなデータでもobject型の変数に代入することが可能です。

ボックス化(boxing)とボックス化解除(unboxing)

object型に関連する重要な概念として、「ボックス化」と「ボックス化解除」があります。

  • ボックス化(boxing):値型をobject型に変換すること。値はヒープ上に新しいオブジェクトとして格納されます。
  • ボックス化解除(unboxing):object型を元の値型に変換すること。明示的なキャストが必要で、変換先の型が一致しない場合は例外が発生します。

object型の使用例

以下は、objectデータ型の使い方を示すサンプルコードです。

using System;
using System.IO;

namespace Demo {
    class objectClass {
        public int x = 56;
    }

    class MyApplication {
        static void Main() {
            // 値型をobject型に代入(ボックス化)
            object obj;
            obj = 96;
            Console.WriteLine(obj);

            // 参照型をobject型に代入
            obj = new objectClass();

            // object型を元の型にキャストして復元
            objectClass newRef;
            newRef = (objectClass)obj;
            Console.WriteLine(newRef.x);
        }
    }
}

この例では、まず整数値96をobject型の変数objに代入しています。これは値型からobject型への変換、すなわちボックス化にあたります。次に、自作クラスobjectClassのインスタンスを同じobj変数に代入し、その後明示的なキャストによって元のobjectClass型へ戻しています。

このようにobject型は非常に柔軟ですが、頻繁なボックス化・ボックス化解除はパフォーマンスに影響を与えるため、実際の開発ではジェネリック(Generics)を活用するなど、型安全性と効率を考慮した設計が推奨されます。

  1. C#のデータ型とは?値型・参照型・ポインタ型の違いを徹底解説

    C#のデータ型は、大きく分けて「値型(Value Type)」「参照型(Reference Type)」「ポインタ型(Pointer Type)」の3種類に分類されます。それぞれの仕組みと使い分けを理解することは、C#プログラミングの基礎として非常に重要です。本記事では、各データ型の特徴を一覧表付きでわかりやすく解説します。 値型(Value Types) 値型の変数には、データそのものが直接代入されます。すべての値型は System.ValueType クラスから派生しており、変数を別の変数に代入すると値がコピーされるため、元の変数には影響しません。 C#で利用できる主な値型は以下のとおりで

  2. ObjectクラスはなぜJavaの全クラスのスーパークラスなのか?理由と主要メソッドを解説

    java.lang.Object クラスは、Javaのクラス階層におけるルート(最上位)に位置するスーパークラスで、java.lang パッケージに含まれています。標準ライブラリのクラスも、開発者が独自に定義したクラスも、すべてこの Object クラスの子孫(サブクラス)となります。明示的に extends を書かなくても、すべてのクラスは自動的に Object を継承します。 Objectクラスがスーパークラスである理由 1. 再利用性(Reusability) すべてのオブジェクトには、比較・複製・文字列化など、共通して必要となる基本的な機能があります。これらを毎回開発者がゼロから