Object type
Peponi │ 11/20/2024 │ 3m
C#
SyntaxTypeobjectSystem.Object
Object type
11/20/2024
3m
Peponi
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
의 메서드 중 일부를 재정의하여 사용할 수 있다.
- public virtual bool Equals (object? obj) : 값이 같은지 확인
- public virtual string? ToString() : 객체를 나타내는 문자열 반환
- public virtual int GetHashCode() : 객체의 해시 코드 반환
- Finalize : 소멸자 (종료자)
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 비교
object
로 boxing
되어있는 변수를 비교하는 경우 값을 비교한다면 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