c#은 객체의 생성과 소멸 과정에 자동으로 호출되는 두 매커니즘이 있습니다.
바로 생성자, 소멸자 입니다.
닷넷은 소멸자의 역할을 프로그래머가 딱히 해줄필요가 없으므로, c/c++과 같이 메모리 반납을
명시적으로 해줄 필요가 없습니다. 참 편리한 닷넷이네요.
1. 생성자
- 객체가 생성이 될때 자동으로 호출되는 메서드 입니다.
- 일반적으로 객체의 초기화 작업시 많이 이용합니다.
class A{
public A(){
Console.WriteLine("생성자 호출");
}
}
이렇게 정의가 되어 있다면 Main() 메소드에서
A a = new A();
이렇게 하면 객체가 생성되면서 생성자가 호출됩니다.
물론 호출과 정의시 규칙이 있습니다.
ㄱ. 생성자는 클래스 이름과 반드시 동일해야합니다.
- 이것은 두말나위 없습니다.(클래스이름을 그대로 적으셔야 합니다)
ㄴ. 생성자는 반환타입이 없어야 합니다.
- 메서드의 일종이라고 해도, return 타입을 가져서는 안됩니다.
ㄷ. 생성자는 여러개의 매개변수를 가질수 있고,
일반적인 메서드 오버로딩이 가능합니다.
- 여러개의 매개변수를 가지며, 다양한 생성자를 여러개 만들수 있습니다.
>> public A(int a, string str){} A(int a, int b){} 이런식으로도 가능합니다.
ㄹ. 생성자를 정의하지 않으면 디폴트(기본) 생성자가 자동으로 만들어진다.
- 매개변수를 가지지 않는 A(){} 라는 생성자가 자동으로 만들어집니다.
ㅁ. 생성자는 상속되지 않는다.
- 메서드나, 필드는 상속되지만 생성자는 자식클래스에 상속되지 않습니다.
2. 생성자 오버로딩
- 생성자도 일종의 메서드에 속합니다. 그러므로 오버로딩 규칙이 적용됩니다.
- 오버로딩이란 용어를 잘 모르셔도 그냥 보시면 이해가 될것입니다.
class A{
public A(){
Console.WriteLine("기본생성자"); // 1번 생성자
}
public A(int i){
Console.WriteLine("int 매개변수 생성자"); // 2번 생성자
}
public A(string s){
Console.WriteLine("string 매개변수 생성자"); // 3번 생성자
}
}
자 생성자가 총 3개이군요
A a = new A(); // 실인수가 없으므로 오버로딩 규칙으로 1번 생성자로!!
A b = new A(3); // 실인수가 int형인 3인 정수형이므로 2번 생성자로
A c = new A("hello"); //실인수가 string type 이므로 3번 생성자로!!
3. 상속과 생성자
- 생성자는 상속되지 않습니다.
- 그러므로 당연히 생성자에 키워드에 virtual, override, sealed 는 사용불가입니다.

위 그림은 닷넷 상속구조입니다. 제일 중요한 Object 클래스 부터 상속되어집니다.
베이스 키워드를 사용하면 자식 객체의 생성자에서 부모 객체의 생성자를 명시적으로
호출할수는 있습니다.
class Child : Parent{
public Child() : base(1){
Console.WriteLine("자식생성자");
}
}
위와 같이 자식 객체 생성자에서 부모 객체 특정 생성자를 명시적으로 호출합니다.