.NET 코드를 살펴보면 Rectangle.Size
은 new Size(Width, Height)
을 반환합니다. Microsoft는 왜이 패턴을 선택 했습니까? 개인적으로, 나는 Size
이 구조체 내에 저장되고, Rectangle.Width
이 Size.Width
을 반환한다고 생각했을 것입니다. 이렇게하면 모든 속성 호출을 만들 때 새로운 구조가 생성되지 않습니다. 나는이 결정에 영향을 미치는 불변성의 일부 속성이 있다고 추측하지만, 나는 무엇을 확신 할 수 없다.모든 호출에서 Rectangle.Size가 새 인스턴스를 만드는 이유는 무엇입니까?
2
A
답변
4
Size
은 구조체이므로 힙에 새로운 객체를 만드는 것과는 다릅니다. 귀하가하는 일은 무엇이든간에 Size
가치의 새로운 사본을 만듭니다.
솔직히 말해서 어떤면에서 큰 차이를 만들지는 알 수 없습니다. Width
과 Height
속성이 Size
이라는 것을 감안할 때, 내가 제안한대로 Size
을 저장하면 페널티가 많이 발생하지 않는다는 것을 알 수 있습니다 ... 그러나 똑같이 Size
의 생성자는 JIT가 Rectangle.Size
속성을 거의 정확히 동일한 기본 코드로 변환 할 수 있어야합니다.
그래서 나는 그것이 약간 이상한 결정에 동의하지만 나는 그것이 많은 사람을 다치게 할 것 같지 않습니다. 아마도 직렬화가 더 간단해질 수도 있습니다.
0
항상 실제 크기로 연결되는 링크를 변경하면 부작용이 생길 수 있습니다. 의도를 변경하려는 경우 조작하려는 오브젝트의 특성이나 getter 및 setter를 사용해야합니다. 레이아웃을 계산하는 등 다른 용도로 사용하려면 가장 적절한 솔루션입니다.
관련 문제
- 1. System.Net.HttpListener가 새 프로세스를 만드는 이유는 무엇입니까?
- 2. R에서 새 클래스를 만드는 이유는 무엇입니까?
- 3. 새 스레드를 비싸게 만드는 이유는 무엇입니까?
- 4. Sql Server 2005의 새 인스턴스를 만드는 방법
- 5. 클래스 개체 상자()의 새 인스턴스를 만드는
- 6. 저장소 패턴을 사용하여 개체의 새 인스턴스를 만드는 올바른 방법은 무엇입니까?
- 7. 모든 WS 호출에서 JAX-WS가 WSDL을 가져 오는 이유는 무엇입니까?
- 8. C#에서 DLL을로드하고 새 인스턴스를 만드는 방법은 무엇입니까?
- 9. 모든 옵션 메시지 프로토콜을 만드는 이유는 무엇입니까?
- 10. 생성자의 모든 클래스 외부에서 인스턴스를 만들 수없는 이유는 무엇입니까?
- 11. bsearch() 호출에서 제시 프로그램이 중단되는 이유는 무엇입니까?
- 12. SessionFactory 인스턴스를 하나만 생성해야하는 이유는 무엇입니까?
- 13. 어떻게 새 인스턴스를 만들
- 14. 새 인스턴스를 사용하여 인스턴스를 직접 교체하는 경우
- 15. 새 인스턴스를 만들 때 DUP가 발생하는 이유
- 16. 전제 조건을 기반으로 새 인스턴스를 만드는 가장 좋은 방법
- 17. jEdit의 새 인스턴스를 여는 방법은 무엇입니까?
- 18. 정수 ID로 클래스 인스턴스를 만드는 패턴은 무엇입니까?
- 19. 인스턴스를 필요로하는 메소드가 필요한 이유는 무엇입니까?
- 20. 각 새 스레드에 FirefoxDriver의 새 인스턴스를 전달하는 방법은 무엇입니까?
- 21. MySQL Workbench 5.2.25 CE에서 새 서버 인스턴스를 만드는 방법
- 22. 새 인스턴스를 사용하여 매개 변수가 필요한 클래스를 만드는 방법
- 23. COM 인터페이스의 새 인스턴스를 만드는 것이 왜 가능합니까?
- 24. AppEngine은 필요없는 새 인스턴스를 시작합니다.
- 25. 블록에서 모듈을 만드는 이유는 무엇입니까?
- 26. 클래스의 인스턴스를 만드는 다른 방법
- 27. 결과는 모든 호출에서 iframe에 추가됩니다.
- 28. 새 폴더를 만드는 방법은 무엇입니까?
- 29. 활동의 인스턴스를 여러 개 만드는 방법은 무엇입니까?
- 30. 활동의 여러 인스턴스를 만드는 방법은 무엇입니까? - revisited
이제는 너비 또는 높이를 호출 할 때마다 구조체 복사본이 생성됩니다. 이 복사본을 숨길 수는 없으며 속성이 인라인되지 못하게하는 MarshalByRefObject에서 파생 된 Rectangle을 가진 많은 클래스가 있습니다. 가장 자주 사용되는 속성은 무엇입니까? 말하기 어렵지만, Rectangle 메소드 자체는 크기를 절대로 사용하지 않습니다. –
@ 한스 - 각 호출이 새 복사본을 생성하는 이유는 무엇입니까? 각 Rectangle은 내부 크기 구조 만 가질 수 있습니까? – dlras2
내부 크기 필드가있는 사각형 유형이 있다고 가정합니다. 이제 Width 및 Height 속성 getter를 구현하는 방법에 대해 생각해보십시오. –