
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 |
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 |