4장 - 1

2014. 11. 15. 10:31IT Books/시작하세요 C# 프로그래밍

System.Object

모든 타입의 조상이다.


클래스를 정의할 때 특별히 명시적인 부모를 정의하지 않으면 C#컴파일러는 기본적으로 object를 상속받도록 해준다.


object는 자체가 참조형이지만 값 형식의 부모이기도 하다.

다만 닷넷에서는 둘 사이의 큰 차이 때문에 모든 값 형식은 System.ValueType을 강제로 상속받게 하고 있다.



object는 다음과 같이 정의되어 있다.






이 메서드들 중 Equals와 GetHashCode는 항상 같이 재정의 해야 한다는 정도만 일단 알고 넘어가면 되겠다.



System.Array

모든 배열은 기본적으로 이 클래스를 상속받게끔 되어 있다.


값형식과 참조 형식.

(Value Type and Reference Type)

닷넷에서 제공하는 기본 자료형들과 유저가 정의한 구조체들은 모두 값형식으로 간주된다.

단 string은 예외적으로 참조형식이다.

모든 배열과 유저가 정의한 클래스들은 모두 참조형식이다.


값 형식은 선언시 스택에, 참조 형식은 new로 생성하며 힙영역에 할당된다.

또한 값 형식은 매개변수로 전달될때 복사가 일어나므로 메모리와 성능상의 오버헤드를 가진다.

이때 c++처럼 ref 키워드를 이용하여 참조로 전달할 수 있다.



Boxing과 Unboxing

값 형식을 object 객체나 원 값 형식에서 구현된 형식으로 변환하는 암시적 변환이다.

Boxing이 일어나면 힙 영역에 객체 할당이 일어나고 값이 새 객체에 복사된다.


Unboxing은 object형식에서 값 형식으로 혹은 특정 객체 형식에서 해당 객체를 구현하는 값 형식으로의 명시적 변환이다.

Unboxing이 일어나면 객체가 지정한 값 형식을 Boxing한 값인지 확인하고 객체의 값을 값 형식 변수에 복사한다.


Unboxing이 성공하려면 Unboxing되려는 항목이 이전에 해당 값 형식의 객체를 boxing하여 만들어진 객체에 대한 참조여야 한다.


https://msdn.microsoft.com/ko-kr/library/yz2be5wk.aspx



this

cpp와 마찬가지로 객체는 기본적으로 자기자신에게 this를 기본 파라미터로 넣어주게 되어 있다.

실제로 컴파일이 되기 전까지는 알 수 없지만...


 

이 코드를 컴파일 하면 

컴파일러는 자동적으로 이와 같이 변환한다.


원형은 위와 같이 변환된다.




base

부모 클래스를 명시적으로 가리키는 데 사용.




오버라이딩


부모는 virtual로 메서드 선언

자식은 override 키워드를 이용하여 재정의. 재정의된 메서드에서 base.메서드 하면 부모의 것도 그대로 호출.

cpp와 동일



오버로드

메서드 및 연산자 오버로드

cpp와 거의 동일.



형변환


형변환 연산자 오버로딩






델리게이트

라고 쓰고 cpp에서는 함수포인터라 읽는다.

다만 csharp에서는 포인터보다 좀 더 쉽게 사용가능하도록 배려를 해주고 있다.


델리게이트는 단순히 타입일 뿐이며

관습적으로 델리게이트 타입의 이름에는 xxxDelegate로 쓴다고 한다.


FuncDelegate deleteFunc = new FuncDelegate(disk.Clean)

이 구문과

FuncDelegate deleteFunc = disk.Clean

이 구문은 같은 의미.


델리게이트는 타입이므로

1. 메서드의 반환값으로 전달가능

2. 메서드의 인자로 전달가능

3. 클래스의 멤버로 정의 가능.

'IT Books > 시작하세요 C# 프로그래밍' 카테고리의 다른 글

4장 - 3  (0) 2014.11.20
4장 - 2  (0) 2014.11.16
시작하세요 C# 프로그래밍 3장  (0) 2014.11.09
시작하세요 C# 프로그래밍 2장  (0) 2014.11.09
시작하세요 C# 프로그래밍 1장  (0) 2014.11.08