갓똥
나는야 프로그래머
갓똥
전체 방문자
오늘
어제
  • 분류 전체보기 (186)
    • 프로그래밍 (146)
      • 자바 (9)
      • 안드로이드 (2)
      • 유니티 (20)
      • C++ (38)
      • C# (56)
      • HTML (2)
      • 파이썬 (3)
      • 자료구조 (2)
      • 알고리즘 (0)
      • 문제풀이 (4)
      • 디자인 패턴 (7)
      • 카카오톡 봇 (1)
      • 엑셀 (1)
      • 기타 (1)
    • 게임 (21)
      • 테일즈위버 (0)
      • 카이로소프트 (1)
      • 순위 (19)
      • 기타 (1)
    • 일상 (13)
      • 카페 (1)
      • 방탈출 (12)
    • 기타 (6)
      • 웃긴자료 (5)

블로그 메뉴

  • 홈
  • 방명록

공지사항

인기 글

태그

  • 전세계 게임 매출
  • C# 예외 처리
  • c# delegate
  • Unity Graph
  • 모바일 게임 순위
  • pc 게임 순위
  • c# coroutine
  • 전세계게임매출순위
  • C++ 상속
  • 게임 매출 순위
  • 2020년 게임 매출
  • C++ virtual
  • C++ 소멸자
  • 자바
  • 글로벌게임매출
  • 유니티 그래프
  • 유니티 골드그래프
  • C++
  • c# Thread
  • 알고리즘
  • pc게임 순위
  • C# boxing
  • 강남 방탈출
  • c# unboxing
  • 롤 골드그래프
  • c# collection
  • c# 코루틴
  • 게임매출순위
  • 게임 디자인 패턴
  • 유니티 그래프 그리기

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
갓똥

나는야 프로그래머

[C#] System.Object
프로그래밍/C#

[C#] System.Object

2020. 1. 21. 00:55
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
    '프로그래밍/C#' 카테고리의 다른 글
    • [C#] 값 타입 vs 참조 타입(2)
    • [C#] 값 타입과 참조 타입(1)
    • [C#] 타입과 변수의 특징
    • [C#] 인터페이스 (interface)
    갓똥
    갓똥
    공부하며 알아가는 내용을 정리해 봅니다.

    티스토리툴바