본문 바로가기
C#/책 정리

C# 정리 ) System.Object

2021. 11. 28.

클래스를 정의할 때 부모 클래스를 명시하지 않는다면 C# 컴파일러는 기본적으로 object 라는 타입에서

상속을 받는다고 가정하고 코드를 자동적으로 생성한다.

따라서

	
    class one
    {

    }
    class one : Object
    {

    }

다음 코드는 동일하게 취급된다.

 

그런데 부모 클래스를 지정하더라도, 그 부모 클래스 또한 상속을 받았을 것이다.

부모 클래스를 명시하지 않았다면 해당 클래스 또한 object 타입을 상속받는다.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Project1
{
    class desktop
    {
        bool power;
        public bool powerControl
        {
            get { return power; }
            set { power = value; }
        }
        public void what()
        {
            Console.WriteLine("데스크탑 입니다.");
        }
    }
    class netbook : desktop
    {
        bool isPortable = true;
        public bool isPort
        {
            get { return isPortable; }
        }
        public void whatNetbook()
        {
            Console.WriteLine("노트북 입니다.");
        }
        class Class1
        {
            public static void Main(String[] args)
            {
                desktop pc = new desktop();
                object temp = pc;
                desktop pc2 = temp as desktop;

                netbook net = new netbook();
                object temp2 = net;
                netbook net2 = temp2 as netbook;
            }
        }
    }
}

pc2 와 net2 에는 값이 온전하게 들어있다.

as 연산자는 형변환이 불가능하다면 null 을 리턴하는데, 디버깅을 해보면 해당 [참조형 변수] 에는

null 값이 아닌 다른 값이 들어있다.

 

object는 그 자체가 [참조형] 이지만, [값 형식] 의 부모 타입이기도 하다.

[참조 형식] 과 [값 형식] 의 처리방법은 매우 다른데, 이러한 불일치를 구분하기 위해서 닷넷은 모든 [값 형식] 을

System.ValueType 타입에서 상속받게 하고 있으며, 다시 System.ValueType은 object 를 상속받는다.

 

따라서 C#에 정의된 모든 형식은 object로 변환하고 다시 되돌리는 것이 가능하다.

 

물론 object를 상속받는 모든 클래스들은 부모클래스 (object) 의 메서드 또한 사용할 수 있다.

모든 메서드를 살펴보지는 말고 대표적은 4개의 메서드를 다음 글들을 통해 살펴보도록 한다.

 

'C# > 책 정리' 카테고리의 다른 글

C# 정리 ) GetType  (0) 2021.11.28
C# 정리 ) ToString  (0) 2021.11.28
C# 정리 ) as, is 연산자  (0) 2021.11.28
C# 정리 ) 상속  (0) 2021.11.28
C# 정리 ) 프로퍼티  (0) 2021.11.28

댓글