Programing

C #에서 동일한 클래스의 다른 생성자에서 오버로드 된 생성자를 호출 할 수 있습니까?

lottogame 2020. 5. 13. 07:58
반응형

C #에서 동일한 클래스의 다른 생성자에서 오버로드 된 생성자를 호출 할 수 있습니까?


C #에서 동일한 클래스의 다른 생성자에서 오버로드 된 생성자를 호출 할 수 있습니까?


아니요, C #의 다른 생성자에서 생성자를 호출 할 수있는 유일한 위치는 생성자 바로 다음에 ":"바로 뒤에 있습니다. 예를 들어

class foo
{
    public foo(){}
    public foo(string s ) { }
    public foo (string s1, string s2) : this(s1) {....}

}

C #에서 ctor chaining을 수행 할 수 있다면 대답은 그렇습니다. 질문 이 이미 요청되었습니다.

그러나 주석에서 보이는 것처럼, 실제로 묻고 싶은 것은 ' 사전 / 사후 처리를 통해 다른 생성자 에서 오버로드 된 생성자를 호출 할 수 있습니까 ?'입니다.
C #에는이를위한 구문이 없지만 일반적인 초기화 함수를 사용하여이 작업을 수행 할 수 있습니다 (ctor 체인을 지원하지 않는 C ++에서와 같이).

class A
{
  //ctor chaining
  public A() : this(0)
  {  
      Console.WriteLine("default ctor"); 
  }

  public A(int i)
  {  
      Init(i); 
  }

  // what you want
  public A(string s)
  {  
      Console.WriteLine("string ctor overload" );
      Console.WriteLine("pre-processing" );
      Init(Int32.Parse(s));
      Console.WriteLine("post-processing" );
  }

   private void Init(int i)
   {
      Console.WriteLine("int ctor {0}", i);
   }
}

편집 : 원래 게시물에 대한 의견에 따르면 이것은 C # 질문입니다.

짧은 대답 : 예 this. 키워드를 사용합니다 .

긴 대답 : 예, this키워드를 사용하면 여기에 예가 있습니다.

class MyClass
{
   private object someData;

   public MyClass(object data)
   {
      this.someData = data;
   }

   public MyClass() : this(new object())
   {
      // Calls the previous constructor with a new object, 
      // setting someData to that object
   }
}

C #에서는 메서드 본문 내부에서 다른 생성자를 호출 할 수 없습니다. foo (args) : base ()는 다음과 같이 기본 생성자를 호출 할 수 있습니다. 같은 클래스에서 다른 생성자를 호출 할 수도 있습니다 : foo (args) : this ().

기본 생성자를 호출하기 전에 무언가를하고 싶을 때, 기본의 구성은 클래스가 외부의 것들에 의존하는 것 같습니다. 그렇다면 기본 클래스의 속성이나 이와 유사한 것을 설정하는 것이 아니라 기본 생성자의 인수를 사용해야합니다.

참고URL : https://stackoverflow.com/questions/985280/can-i-call-an-overloaded-constructor-from-another-constructor-of-the-same-class

반응형