C# .NETのすべてのデータ型の基本クラスとは?Objectクラスとボックス化を解説
C# .NETにおけるすべてのデータ型の基本クラス
C# .NETにおいて、すべてのデータ型の基本クラスとなるのはObjectです。Object型は、C#の共通型システム(CTS:Common Type System)におけるすべてのデータ型の最終的な基底クラスとして位置づけられており、objectはSystem.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)を活用するなど、型安全性と効率を考慮した設計が推奨されます。
-
C#のデータ型とは?値型・参照型・ポインタ型の違いを徹底解説
C#のデータ型は、大きく分けて「値型(Value Type)」「参照型(Reference Type)」「ポインタ型(Pointer Type)」の3種類に分類されます。それぞれの仕組みと使い分けを理解することは、C#プログラミングの基礎として非常に重要です。本記事では、各データ型の特徴を一覧表付きでわかりやすく解説します。 値型(Value Types) 値型の変数には、データそのものが直接代入されます。すべての値型は System.ValueType クラスから派生しており、変数を別の変数に代入すると値がコピーされるため、元の変数には影響しません。 C#で利用できる主な値型は以下のとおりで
-
ObjectクラスはなぜJavaの全クラスのスーパークラスなのか?理由と主要メソッドを解説
java.lang.Object クラスは、Javaのクラス階層におけるルート(最上位)に位置するスーパークラスで、java.lang パッケージに含まれています。標準ライブラリのクラスも、開発者が独自に定義したクラスも、すべてこの Object クラスの子孫(サブクラス)となります。明示的に extends を書かなくても、すべてのクラスは自動的に Object を継承します。 Objectクラスがスーパークラスである理由 1. 再利用性(Reusability) すべてのオブジェクトには、比較・複製・文字列化など、共通して必要となる基本的な機能があります。これらを毎回開発者がゼロから