답변

6
public MyClass() 
{ 
    // do stuff 
} 

public MyClass(int num) 
    : this() 
{ 
    // do other stuff with num 
} 

: this() 비트는 생성자 Initialiser이라고합니다. C#의 모든 생성자에는 생성자 본문보다 먼저 실행되는 초기화자가 있습니다. 기본적으로 initialiser는 기본 클래스의 매개 변수없는 생성자 (또는 클래스가 다른 클래스에서 명시 적으로 파생되지 않은 경우 Object)입니다. 이렇게하면 파생 클래스의 나머지가 구성되기 전에 기본 클래스의 멤버가 올바르게 초기화됩니다.

각 생성자의 기본 생성자 초기화 프로그램은 두 가지 방법으로 재정의 될 수 있습니다.

  1. : this(...) 구조체는 동일한 클래스의 다른 생성자를 적용되는 생성자의 initiliser로 지정합니다.
  2. : base(...) 구조체는 기본 클래스의 생성자를 지정합니다 (매개 변수없는 생성자는 일반적으로 기본이 아니므로).

자세한 내용은 C# 4.0 언어 사양 섹션 10.11을 참조하십시오.

2

당신은 이런 식으로 작업을 수행 할 수 있습니다

public MyClass() 
{ 
    // do stuff here 
} 

public MyClass(int num) : this() 
{ 

    // do other stuff here 
} 
+0

다른 기능을 대체 할 수있는 '이()'이 맥락에서? – CJ7

+0

@ CJ7 그것은 함수가 아닙니다. 특수 구문 구조입니다. 단지'this (..)'와'base (..)'만이 허용됩니다. [생성자 사용] (http://msdn.microsoft.com/en-us/library/ms173115%28v=vs.110%29.aspx)을 참조하십시오. –

1

아마 매개 변수의 기본 값으로 하나의 생성자를 사용

public MyClass(int num = 0) 
{ 
    MyClass(); 
    // do other stuff here 
} 
3

올바른 구문은 다음과 같습니다

public MyClass() 
{ 
    // do stuff here 
} 

public MyClass(int num) : this() 
{ 
    // do other stuff here 
} 

주에게 this()를 두 번째 생성자에서. 이것은 매개 변수없이 동일한 클래스의 생성자를 호출합니다.

public MyClass(int num) : base(someParameterOnTheBaseClassConstructor) 
{ 
} 

이를 :

public MyClass() : this(someReasonableDefaultValueForNum) 
{ 
} 

public MyClass(int num) 
{ 
    // do all stuff here 
} 

은 또 하나의 "기능"당신은 base 인이 곳에서 this 대신 사용할 수 있습니다 :

당신은 또한 그것을 다른 방법으로 주위를 가질 수 기본 클래스에서 기본 매개 변수없는 생성자를 호출하지 않고 매개 변수를 사용하는 생성자 중 하나를 호출하려는 경우 유용합니다.

+1

이것은 생성자 체인으로 알려져 있습니다. –

0

당신은 다음을 수행 할 수 있습니다

public MyClass() 
    : this(1) { } 

public MyClass(int num) 
{ 
    //do stuff here 
}