728x90
반응형
1. 핵심 정리
using System;
class Car {
}
class Program {
static void Main(string[] args) {
Car c = new Car();
c.ToString(); // ??
}
}
Car 라는 클래스를 만들고 Main에서 객체를 생성했다.
분명 Car 클래스 내부에는 어떠한 멤버도 없지만 Main에서 c. 을 입력하면 사용가능한 함수가 있다.
멤버를 만들지 않았는데 어떻게 사용 가능한걸까?
① 모든 타입은 System.Object 로부터 파생 된다.
=> 컴파일러가 Object라는 클래스로부터 상속받도록 한다.
② System.Object
=> 2개의 static method
=> 3개의 virtual instance method
=> 1개의 non-virtual instance method
=> 1개의 protected instance method
③ C# 언어의 모든 타입은 공통의 특징(System.Object가 제공하는)을 가지고 있다.
2. ToString()
using System;
class Point {
private int xPos = 0;
private int yPos = 0;
public Point(int x, int y) { xPos = x; yPos = y; }
}
class Program {
public static void Main() {
Point p1 = new Point(1, 1);
Point p2 = new Point(2, 2);
Console.WriteLine(p1.ToString());
Console.WriteLint(p2.ToString());
}
}
Point 클래스를 만들고 Main에서 객체로 만들어 출력하는 코드이다.
이전에도 그랬지만 Point 클래스 내부에 ToString이라는 멤버를 만들지 않았다.
하지만 Object로부터 상속을 받으니 쓸 수 있다.
① 객체를 문자열로 변경하는 메소드
② System.Object의 기본 구현
=> 객체의 타입 이름을 문자열로 반환
③ 일반적으로 객체의 상태를 나타내도록 재정의 하는 경우가 많다.
ToString()을 사용하면 클래스 이름이 나오는데
사용자는 x, y형태로 출력하고 싶다면 어떻게 하면 될까?
using System;
class Point {
private int xPos = 0;
private int yPos = 0;
public Point(int x, int y) { xPos = x; yPos = y; }
public override string ToString() {
return string.Format($"{xPos}, {yPos}");
}
}
class Program {
public static void Main() {
Point p1 = new Point(1, 1);
Point p2 = new Point(2, 2);
Console.WriteLine(p1.ToString());
Console.WriteLint(p2.ToString());
}
}
④ 사용자 정의 타입을 설계 할 때 System.Object의 3개의 가상 메소드를 재정의 하는 경우가 많다.
728x90
반응형
'프로그래밍 > C#' 카테고리의 다른 글
[C#] 값 타입 vs 참조 타입(2) (1) | 2020.01.30 |
---|---|
[C#] 값 타입과 참조 타입(1) (1) | 2020.01.22 |
[C#] 타입과 변수의 특징 (0) | 2020.01.20 |
[C#] 인터페이스 (interface) (1) | 2020.01.17 |
[C#] 클래스 기본 문법 (1) | 2020.01.13 |