2009-07-01 6 views
34

앞에 this 키워드는 콜론입니다. 누구든지이 상황에서 콜론이 의미하는 바를 설명 할 수 있습니까? 나는 이것이 상속이라고 생각하지 않는다.콜론 (:)은 무엇을 의미합니까?

감사

using System; 

namespace LinkedListLibrary 
{ 
    class ListNode 
    { 
     private object data; 
     private ListNode next; 

     public ListNode(object dataValue) 
      : this(dataValue, null) 
     { 
     } 

     public ListNode(object dataValue, ListNode nextNode) 
     { 
      data = dataValue; 
      next = nextNode; 
     } 

     public ListNode Next 
     { 
      get 
      { 
       return next; 
      } 
      set 
      { 
       next = value; 
      } 
     } 
     public object Data 
     { 
      get 
      { 
       return data; 
      } 
     } 


    } 
} 
+1

참조 http://stackoverflow.com/questions/338398/-thisfoo-syntax-in-c-constructors –

+0

MSDN은 생성자에 대한 기본 및 키워드 사용법을 다음 사이트에서 다루고 있습니다. http://msdn.microsoft. com/ko-kr/library/ms173115 (VS.80) .aspx – rmoore

+1

그리고 http://www.yoda.arachsys.com/csharp/constructors.html – RichardOD

답변

12

그것은 생성자 체인되어 있으므로 서명과 일치의 ctor에 후속 : this 콜 의지 체인 생성자. 이 경우에 따라서

public ListNode(object dataValue) 

: this(dataValue, null)

는 대장로라는 ctor에이 전에 실행하는 주목할 가치를 통해 두 번째 PARAM에 null

public ListNode(object dataValue, ListNode nextNode) 

를 호출 객체를 초기화하기 위해 호출 된 ctor입니다.

+2

"ctor가 실행되기 전에 호출 됨"을 참조하십시오. 이것이 이유입니다 내 WinForms 애플 리케이션에서 생성자를 오버로드하고 모든 매개 변수가있는 생성자의 InitializeComponent()로 끝납니다. 기본 생성자는 오버로드를 호출하고 기본 인수를 전달합니다. 보통 (0 매개 변수) -> 호출 -> (1 매개 변수) -> 호출 -> (2 매개 변수) -> 기타 -> (대부분의 매개 변수)의 체인을 사용합니다."MainForm()과 같은 빈 ctors를 제공함으로써 : this (1, null) {}"나는 오버 헤드가별로 없으며 생성자에서 코드를 반복하지 않아도됩니다. 보너스. – maxwellb

50

키워드와 함께 (this 키워드와 함께) 동일한 유형의 다른 생성자를 호출하기 전에 생성자가 그 자체를 실행하도록 지시합니다. 따라서

:

public ListNode(object dataValue) 
    : this(dataValue, null) 
{ 
} 

효과적으로된다 : 생성자를 지시하는 대신 thisbase을 사용할 수 있습니다

public ListNode(object dataValue) 
{ 
    data = dataValue; 
    next = null; 
} 

참고 기본 클래스의 생성자를 호출 할 수 있습니다.

+0

7 년 후 ....'this'를 사용하는 경우 메서드 오버로딩을 사용하는 것처럼 보입니다. 맞습니까? 그렇다면 유스 케이스의 예를 들어 줄 수 있습니까? –

+0

'기본 클래스 '는 무엇을 의미합니까? 당신은 이것을 의미합니까 : https://msdn.microsoft.com/en-us/library/system.type.basetype(v=vs.110).aspx? 임 초보 그래서 귀하의 답변에 구체적으로하십시오 :) – TechJS

8

본문을 실행하기 전에 object 및 ListNode 매개 변수로 생성자를 실행하십시오.

5

다른 ListNode 생성자를 호출합니다. base 키워드를 사용하여 유사한 작업을 수행하여 파생되는 클래스의 생성자를 호출 할 수 있습니다.

2

아니요, 새 생성자의 본문을 실행하기 전에 기존 생성자 오버로드 (두 개의 매개 변수가있는 오버로드)를 실행할 수 있습니다.

여러 생성자 오버로드에서 생성자 코드를 재사용하는 가장 간단한 방법입니다.

1

코드는 현재 생성자의 본문이 실행되기 전에 제공된 인수를 사용하여 다른 생성자를 실행하도록 지시합니다.

+0

난 당신이 C + +를 생각하고있어. 이것은 C#입니다. –

+0

Doh. 태그를 한 눈에 보면 너무 빨리 지나치게 멋지다. –

+1

C++ 부분을 편집 (또는 C# 개발자에게 다소 혼란 스러울 수도 있음)하거나 대답을 삭제하는 것이 좋습니다. –

1

생성자 체인 인수. 기본 유형의 생성자에 대한 호출을 연결하기위한 ": base()"도 있습니다.