Favicon

Object type

Peponi11/20/20243m

C#
SyntaxTypeobjectSystem.Object

1. Introduction

object (System.Object) 는 C# 모든 형식이 직간접적으로 상속하는 형식으로 null을 포함한 모든 형식의 값을 할당할 수 있다. 값 형식의 변수가 object로 변환되면 boxed, object값 형식으로 변환되면 unboxed라고 한다. (Boxing 및 Unboxing(C# 프로그래밍 가이드))

2. object 초기화

object를 초기화 하는 방법은 아래와 같다.

// object 형식에는 모든 형식의 값을 할당할 수 있다.
object A = 1;
object B = "A";
object C = new MyClass();

3. object 상속

.NET의 모든 클래스는 암시적으로 object를 상속받는다. 따라서 object의 메서드 중 일부를 재정의하여 사용할 수 있다.

internal class MyClass
{
    public int X { get; init; }
 
    public override bool Equals(object? obj)
    {
        if (obj == null) return false;
        return obj is MyClass && X == ((MyClass)obj).X;
    }
 
    public override string ToString() => X.ToString();
 
    public override int GetHashCode() => X.GetHashCode();
 
    ~MyClass()
    {
        // Finalizer, Do something..
    }
}

4. object 비교

objectboxing 되어있는 변수를 비교하는 경우 값을 비교한다면 Object.Equals을 사용한다. 참조를 비교하는 경우 Object.ReferenceEquals을 사용한다.

internal class MyClass
{
    public int X { get; init; }
 
    public MyClass(int x) => X = x;
 
    public override bool Equals(object? obj)
    {
        if (obj == null) return false;
        return obj is MyClass && X == ((MyClass)obj).X;
    }
 
    public override string ToString() => X.ToString();
 
    public override int GetHashCode() => X.GetHashCode();
 
    ~MyClass()
    {
        // Finalizer, Do something..
    }
}
object C = new MyClass(10);
 
Console.WriteLine(C.Equals(new MyClass(10)));         // True
Console.WriteLine(C.Equals(10));                              // False
 
object D = new MyClass();
 
Console.WriteLine(Object.ReferenceEquals(C, D));    // False
 
D = C;
 
Console.WriteLine(Object.ReferenceEquals(C, D));    // True

5. 참조 자료