정리가 필요한 카테고리(추후 정리)/C#,Unity

C#] 인스턴스 생성자

TwinParadox 2017. 1. 12. 03:18
728x90

인스턴스 생성자



클래스나 구조체의 인스턴스를 초기화하는 함수 멤버

생성자의 정의는 메서드와 유사하나, 메서드 이름과 반환 형식이 생성자가 속한 형식의 이름을 따름



- 인스턴스 생성자에 적용할 수 있는 수정자


접근 수정자

public internal private protected

비관리 코드 수정자

unsafe extern



- 중복적재


중복적재한 경우 this 키워드를 이용해 다른 생성자를 호출해 중복을 피함

한 생성자가 다른 생성자를 호출할 경우, 호출된 생성자가 선행적으로 실행됨.


다른 생성자에 표현식을 넘겨주는 것도 가능하나,

this를 통해 어떤 인스턴스 메서드를 호출할 수 없기 때문에

표현식 자체에서 this 참조는 사용할 수 없음.

정적 메서드는 호출이 가능함.


해당 제약은, 생성자의 현재 단계에서 객체가 초기화된 것이 아니라

어떤 메서드를 호출하면 실패할 가능성이 높기 때문에 있는 것임.



- 암묵적 정의


클래스의 경우 프로그래머가 정의하지 않거나 그래야 하는 경우에,

C#에서 매개 변수 없는 공용 생성자를 자동으로 생성함.

생성자를 하나라도 정의하면 컴파일러는 공용 생성자는 자동으로 생성되지 않음.



- 비공용 생성자


생성자는 비공용일 수도 있음.

이는 정적 메서드 호출을 통해 객체 생성을 제어하는 것.

매번 새 객체를 생성하는 대신 풀에서 객체를 돌려주거나,

여러 하위 클래스 중 하나를 선택해 해당 인스턴스를 돌려주는 등의 맞춤형 생성 논리 구현을 위해 활용함.




- 객체 초기치


C# 3.0에서 도입됨.

객체를 좀 더 간단히 초기화하는 방법

생성자 호출 구문 바로 다음에 객체 초기치 블록을 지정, 객체의 접근 가능한 필드나 속성 초기화 가능.


이러한 상황에서 임시 변수를 사용하는 이유는 예외 안전성을 추구하기 위함.

초기화 도중 예외 발생해도 객체가 초기화가 덜 된 상태로 남겨지는 일 없음.



728x90

'정리가 필요한 카테고리(추후 정리) > C#,Unity' 카테고리의 다른 글

C#] 인덱서(Indexer)  (0) 2017.01.14
C#] 속성(Property  (0) 2017.01.13
C#] namespace 규칙  (0) 2017.01.09
C#] using static 지시자  (0) 2017.01.08
C#] 널 관련 연산자  (0) 2017.01.07