클래스를 정의할 때 부모 클래스를 명시하지 않는다면 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 |
댓글