이 두 객체 생성 문을 설명해주십시오.객체 생성의 차이
답변
첫 번째 명령은 스택 (A a
)에 변수를 할당하고 힙 (new A()
)에서 초기화합니다.
두 번째 변수는 스택에 변수 만 할당합니다. 초기화되지 않으므로 할당 할 때까지 함수의 반환 값 또는 클래스 생성자를 호출 할 때까지 사용할 수 없습니다.
사이드 참고 : 프로그램을 컴파일하고 실행하는 경우, 심지어 원격으로 당신이 쓴 코드를 닮은하지 않습니다. 변수는 필요한 바로 전에로드됩니다. 위에있는 코드는 대략 다음과 같을 것이다 :
.method private hidebysig static void Main(string[] args) cil managed
{
.entrypoint
// Code size 8 (0x8)
.maxstack 1
.locals init ([0] class DERP.Program/A a, // This code here declares a local
// variable: A a;
[1] class DERP.Program/A b) // another local variable: A b;
nop
newobj instance void DERP.Program/A::.ctor() // This is: new A()
stloc.1 // this loads the new A() we created
// into A b; (stloc.1 means to store
// the last item we created into the
// local variable at index [1]
ret
} // end of method Program::Main
완전히 그 명령을 각각이 무엇인지 이해하지 않으면 괜찮아,하지만 난 그것을 시도하고 만드는 데 댓글을 달았습니다 아마도 앞으로 나아갈 수 있습니다. 우리는 결코
A a
을 할당하지 않기 때문에 로컬 스택에 앉아서 놀고 아무것도하지 않습니다. 어떤 객체도 가리 키지 않기 때문에 사용할 수 없습니다.
는 실제 할당에서 분리 선언을 볼 수있는 코드에서 여러 가지 이유가 있습니다.
예를 들어 try {} catch {}
절 외부에서 변수를 선언해야하는 경우가 있습니다. 클래스가 생성자에서 값을 가져옵니다. 당신은 데이터를 데이터베이스에서 가져 오는 함수를 가지고 있습니다. 그러나 DB 호출 이후 예외를 catch하고 throw 된 경우 DB 호출에서 반환 된 값 대신 클래스를 기본값으로 초기화합니다. 방식으로 인해 범위 지정에
C#으로 작동하는 try {} catch {}
내부에 선언 된 변수는 코드에서 변수 이전 선언에 당신이에게 초기화 전에 따라서 당신이 필요로하는 것, 그것은 외부에서 액세스 할 수 없습니다.
귀하의 진술 : "두 번째는 스택에 변수를 할당하기 만하며 초기화되지 않으므로 함수의 반환 값이나 클래스 생성자를 호출 할 때까지는 사용할 수 없습니다." 이제 내 두 번째 객체 A와 함수를 호출하면 그것에 대해 무엇이 있는지 알려주십시오. a.Func(); func가 어떤 것을 반환하지 않는다면 그것을 사용할 수 있습니까? –
알았어. 너의 요지가있어. 고마워. –
아니. 변수'A a'를 선언하면, 뭔가를 할당하는 것 외에는 어떤 식 으로든 사용할 수 없다. 'a.Func()'는 변수가 초기화되지 않았다는 컴파일러 오류를 생성합니다. 'A a = new A()'또는'A a = SomeFunctionThatReturnsClassA()'를 할 필요가 있습니다. –
A a = new A();
이 유형 A
의 새로운 객체를 생성합니다. a
의 값은 A
의 새 인스턴스가됩니다.
A a;
이것은 단지 A
의 유형으로 선언합니다. a
의 값은 null
입니다.
첫 번째 것은 새로운 insatnce를 만들고 변수 a
에 할당합니다.
두 번째 인스턴스는 인스턴스를 만들지 않으므로 a
은 null
입니다.
제 성명 그 클래스의 새로운 오브젝트 인스턴스를 생성하며 이는 단지 참조를 만드는 번째 문장에서 변수
에 할당한다.
첫 번째 구문 만 실제로 새 개체를 만듭니다. 다른 두 번째 구문은 스택에 A 형 변수를 할당한다고 언급했습니다.
처음으로 맨드 힙에 새 오브젝트를 작성하면 스택에 작성된 A
유형의 변수 a에 참조가 저장됩니다.
- 1. 참조 생성과 객체 생성의 주된 차이점은 무엇입니까?
- 2. Scala에서 객체 필드에 대한 getters/setters 자동 생성의 요점은 무엇입니까?
- 3. 목표 - C 객체 생성 방법의 차이
- 4. BSP 던전 생성의 간단한 예제
- 5. NLTK에서 자체 코퍼스 생성의 이점
- 6. 코드 생성의 간단한 JDT 예제
- 7. 차이 차이 사이 란
- 8. 차이
- 9. 차이
- 10. 차이
- 11. 차이
- 12. 차이
- 13. 차이
- 14. 차이 []
- 15. 차이
- 16. 차이
- 17. 차이
- 18. 차이
- 19. 차이
- 20. 차이
- 21. 차이
- 22. 차이
- 23. 차이
- 24. 차이
- 25. 차이
- 26. 차이
- 27. 차이
- 28. 차이
- 29. 차이
- 30. 차이
이 숙제가 있습니까? – mjv
당신이 생각했던 것을 우리에게 설명해 주면 더 좋았을 것입니다. – Woot4Moo