2014. 11. 15. 10:31ㆍIT 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 |