.NET/C#
[C#] 요것 한번 보시죠... VB.NET 에는 없어요. ^^'
WooGong Peter
2009. 3. 6. 01:53
현재 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 ))*
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
그러다가
이런 문장을 봤다. ㅡㅡ'
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 ))*
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
반응형