현재 C# 으로 프로젝트를 하니라고 맨땅에 열심히 헤딩하고 있다.
그러다가 
이런 문장을 봤다. ㅡㅡ'

    public woojja1(string str)
      :this()

woojja1(string str) 은 Constructor 다.
그런데...

:this()는 뭐냐? VB.NET 개발자들에게는 생소하리라 생각된다...
이게 어떤 버젼부터 튀어나왔는지도 모르겠다.(아시는 분 알려주셔요. 1.1 부터인가?)

보니. Default Constructor 를 호출하는 문장이다.

woojja1(string str)보다 woojja1() 을 먼저 실행하게끔 한다.
그렇기 때문에  woojja1() Default Constructor 를 주석처리하게되면 에러가 발생하게된다.
기본적으로 Default Constructor를 호출해야하는데 명시적으로 존재하지 않기 때문에 에러가 발생하는 것이다.

하지만...

reference type 이 아닌 value type 이라면 이야기가 달라진다.
아래 woojja2 가 그 예인데...
일단 아래의 woojja2 structure 의 주석을 풀고 Code를 컴파일 또는 실행하게 되면  structure 는 Parameter 가 없는 Constructor는 명시적으로 포함할 수 없다는 에러메시지가 발생하며 주석있는 대로 컴파일 혹은 실행을 시켜도 에러가 발생하지 않는 것을 알 수 있다.

이런 부분은 단순히 parameter 가 있는 Constructure 내부에서 Default Constructure를 호출할 수있지만
이런 식으로 Default Constructure 를 호출하게 되면 코드 실행순서에 대한 예기치 않은? 에러를 방지할 수 있으리라 생각된다.

VB.NET 에도 포함되어있다면 조금은 편리할 수 있으리라 생각된다. 
(있는데 내가 못찾는 건가? ^^'  그렇다면 알려주셔요... )


아래는 작성해 본 코드입니다.
디버깅을 걸어놓고 코드진행을 눈으로 살펴보시면 이해하기가 훨 나으리라 생각됩니다.
^^ 

using System;
using System.Collections.Generic;
using System.Text;
using System.Diagnostics;

namespace ConsoleApplication1
{
  class Program
  {
    static void Main(string[] args)
    {
      woojja1 w1 = new woojja1("woojja");
      woojja2 w2 = new woojja2("woojja");
      Console.ReadLine();
    }
  }


  class woojja1
  {
    public woojja1()
    {
      Console.WriteLine("woojja 1 Default");
    }
    public woojja1(string str)
      :this()
    {
      Console.WriteLine("woojja 1");
    }
  }

  struct woojja2
  {
    //public woojja2()
    //{
    //  Console.WriteLine("woojja 2 Default");
    //}
    public woojja2(string str)
      : this()
    {
      Console.WriteLine("woojja 2");
    }
  }
}



행복한 고수되세요...


woojja ))*
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
반응형

'.NET > C#' 카테고리의 다른 글

[C#] How do you check if a file is in use?  (0) 2017.07.27
[C#] 단일 Process 실행  (2) 2010.11.08
[C#] C# 은 VB.NET 따라쟁이...  (3) 2009.05.07
[C#] C# 컴파일러 오류  (0) 2009.03.06
[C#] Yield  (0) 2009.03.06

+ Recent posts