C#의 모든 클래스의 최상위에 있는 클래스이다.
따라서 사용자 정의 클래스를 비롯한 모든 클래스는 Object를 상속받는다.
Object 클래스는 다음과 같은 4개의 public 메소드를 포함하고 있다.

1
2
3
4
5
6
7
public class object
{
    public virtual bool         Equals(object obj);
    public virtual int         GetHashCode();
    public Type                 GetType();
    public virtual string     ToString;
}
cs



1
2
3
4
5
6
7
8
9
10
11
namespace CSharp_Practice
{
    class Program
    {
        static void Main(string[] args)
        {
            Program program = new Program();
            Console.WriteLine(program.ToString());
        }
    }
}
cs

실행 결과 : CSharp_Practice.Program


ToString() 메소드는 기본적으로 해당 인스턴스가 속한 클래스의 전체 이름(FQDN)을 반환한다.

하지만 각 클래스에서 오버라이드 할 수 있기 때문에, 다르게 동작할 수도 있다.

값 타입들(short, int, ... )의 ToString()은 담고 있는 값을 반환한다.




1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class Parent
{
    public void foo()
    {
        System.Console.WriteLine("Foo!");
    }
}
 
Parent parent = new Parent();
Type type = parent.GetType();
 
Console.WriteLine(type.FullName);
Console.WriteLine(type.IsClass);
Console.WriteLine(type.IsArray);
cs


실행 결과 : 

Parent

True

False


GetType() 메소드는 인스턴스에서 타입을 알아낸다.


*클래스명에서 바로 타입을 얻어내고 싶을 때는 typeof 메소드를 이용한다.

ex) Type type = typeof(Parent);



Equalse(object) 메소드는 인자와 인스턴스가 같은지 비교해 bool형으로 반환한다.

value type에 대해서는 값으로 비교, ref type에 대해서는 같은 주소를 가리키고 있는지를 비교한다.



GetHashCode() 메소드는 특정 인스턴스를 고유하게 식별할 수 있는 4바이트 int값을 반환한다.

Equals()가 true를 반환할 경우 두 객체의 HashCode도 같아야 한다.

때문에 보통 Equals 메소드를 하위 클래스에서 재정의할 때 GetHashCode까지 재정의해야 한다.

당연히 value type의 경우 값이 같다면 HashCode또한 같다.

'C#' 카테고리의 다른 글

C# 추상 클래스  (0) 2016.06.08
C# 연산자 오버로딩  (0) 2016.06.08
C# 클래스 - 상속  (0) 2016.06.08
C# 클래스 - 형변환  (0) 2016.06.08
C# 클래스 - 프로퍼티(property)  (0) 2016.06.07
Posted by RPG만들기XP
,