>

생성자 내에서 다른 클래스를 인스턴스화 할 수 있습니까? 그렇지 않다면 왜 그런가요?

public class Class1() {}
public class Class2() {
    public Class2() {
    Class1 c1 = new Class1();
    }
}


  • 답변 # 1

    그렇습니다. 그러나 초보자 인 것처럼 보입니다 (반갑습니다) : Class1개체를 인스턴스화합니다. . 클래스를 인스턴스화 할 수 없습니다. 귀하의 예에서, 그 객체는 생성자 내부의 모든 코드가 실행되면 파괴되는 로컬 변수입니다. 실제로 이것은 c1 를 사용할 수 없음을 의미합니다  어디서나 생성자 내부. Class2멤버(특히필드)로 만들 수 있습니다.  클래스 본문에 선언하여 Class2 객체의 존재에 바인딩함으로써 예를 들면 다음과 같습니다.

    public class Class1() { }
    public class Class2() 
    {
        Class1 c1;
        public Class2() 
        {
           c1 = new Class1();
        }
    }
    
    
    이것은 pyzwyz를 허용합니다  클래스 내 어디에서나 사용할 수 있습니다.

  • 답변 # 2

    예, 다른 클래스의 생성자 메서드 안에서 클래스를 인스턴스화 할 수 있습니다. 당신이 직면하고있는 문제는 가변 범위, 즉 사용/액세스 할 수없는 곳입니다. 클래스, 생성자, 메서드, 속성 등을 사용하려는 "영역"에서 변수를 정의해야합니다. 원래 게시물의 코드를 사용하여 설명하려고합니다.

    인스턴스화 할 클래스 :

    c1
    
    

    인스턴스화를하는 클래스 :

    public class Class1()
    {
    }
    
    

    변수 public class Class2() { public Class2() { Class1 c1 = new Class1(); } } 를 사용할 수 없습니다  생성자에 정의되어 있으므로 이 생성자가 정의 된 위치이기 때문에이 생성자에서만 사용할 수 있습니다.

    c1 의 다른 곳에서 사용하고 싶다면  다음과 같이 생성자 외부에서 정의하는 것이 좋습니다. 이 방법으로 Class2 의 어느 곳에서나 사용할 수 있습니다 :

    Class2
    
    
    또는 pyzwyz의 메소드에서 사용할 수 있습니다.  이와 같이 :

    public class Class2()
    {
         Class1 c1 = null;
         public Class2()
         {
              // You can instantiate it in the constructor
              c1 = new Class1();
         }
    }
    
    

    놀이를하고 자신에게 맞는 것이 무엇인지 알아보십시오. 일반적으로 사용하려는 클래스를 인스턴스화합니다. 예를 들어 Class2 가 필요한 경우  메소드에서 다음은 정의하고 인스턴스화 할 곳입니다.

    public class Class2()
    {
         Class1 c1 = null;
         public void Method1()
         {
              // You can instantiate it in the method
              c1 = new Class1();
         }
    }
    
    

    이것이 도움이되기를 바랍니다.

    Class1

관련 자료

  • 이전 c# - ASPNET Core에서 범위가 지정된 개체를 해결하는 단일 팩토리를 등록하는 방법은 무엇입니까?
  • 다음 python - 가져온 함수를 사용하여 출력 변수 저장