모든 것이 객체에서 상속되므로 List<T>
과 List<object>
의 차이점은 무엇입니까? 이점? 단점?리스트 <T>과리스트 <object>의 차이점은 무엇입니까?
답변
을 List<object>
에 삽입하면 상자에 넣습니다. List<int>
에 삽입하면 상자에 넣지 않습니다 (이 유형은 int
을 해당 유형으로 바꾸는 모든 값 유형에 해당됨). 마찬가지로 List<object>
에서 값을 검색하는 경우에는 언 박싱이 발생하지만 List<int>
의 경우에는 발생하지 않습니다.
List<T>
은 강력하게 입력되어 있으므로 List<object>
은 컴파일되지 않습니다. 따라서 컴파일 타임의 안전성이 떨어지고 런타임 오류가 발생할 수 있습니다.
List<object>
을 사용하면 항목을 입력하지 않아도 모든 것을 캐스팅해야합니다. 게다가 위험한 이유는 목록에 무엇이든 넣을 수 있고 어떤 항목에 대해 정확히 무엇이 돌아 오는지 알 수 없기 때문입니다.
대괄호를 수정 해 주셔서 감사합니다. 나는 그저 그렇게하려고했다. –
"... item typing ..."을 사용하면 캐스트를 수행 할 때까지 속성이나 메서드에 액세스 할 수 없다는 것을 의미합니까? – Xaisoft
컬렉션에 올바른 유형의 항목을 추가하는 것이 더한 컴파일 시간을 지원합니다. 가장 명백한 단점은 캐스팅없이 객체와 상호 작용할 수 없다는 것입니다. –
List<T>
이 있으면 객체가 인스턴스화 된 후에 목록에 T 유형의 인스턴스 만 포함되고 List<object>
에는 아무 것도 넣을 수 있습니다.
제네릭은 컴파일 타임에 강력한 유형의 재사용 가능한 코드를 작성하는 좋은 방법입니다.
그래서 목록에 다른 유형이 포함될 수 있다면 객체를 사용하는 것이 더 낫습니까? – Xaisoft
그런데 좋은 답. List와 대조적으로리스트
List는 제네릭 형식을 템플릿 인수로 사용합니다. 그래서, 당신은 진정으로 자동차의 목록을해야합니다 당신이 할 경우 :
List<car> list = new List<car>();
반면 :
List<object> objlist = new List<object>();
아무것도에 대한 참조를 보유 할 수 있습니다. 문제는 이러한 참조가 객체로 다운 캐스팅되고 올바른 객체로 다시 채울 때까지 멤버 및 함수를 사용할 수 없다는 것입니다. 당신이 objlist에서 자동차를 보유하는 경우 예를 들어, 당신은해야 할 것 :
list[0].GetMaker();
이것은 당신이 적어도이 가정
((car)objlist[0]).GetMaker();
당신이 할 수있는 자동차를 목록 GetMaker 기능 wehreas를 호출하려면 목록에서 하나의 car/obj.
좋은 예. 내가 더 잘 이해할 수있게 도와 주었다. – Xaisoft
질문이 약간 혼란 스럽지만 jsmarble이 필요한 모든 유형을 원하는 방식으로 캐스팅해야한다는 점에서 주요 포인트 중 하나에 부딪혔다 고 생각합니다. 비효율적인데 특히 List<T>
이 값을 입력하고 상자에 넣지 않아도 처리 할 수있는 값 유형이 있습니다.
또한 런타임 오류가 발생할 수있는 유형 안전을 희생합니다.
목록에서 T를 유형 제약 조건으로 간주 할 수 있습니다. 그래서 당신이 말하는 경우
class Vehicle {}
class Car : Vehicle {}
class Boat : Vehicle {}
class SpeedBoat : Boat {}
List<Boat> listOfBoats
목록에는 보트의 타입과 그 자손이지만 다른 어떤 차량도 포함 할 수 없다. 당신이 그것을 객체로 설정했다면 List는 기본적으로 모든 참조 타입을 포함 할 수 있습니다.
예를 들어그 컬렉션의 모든 SpeedBoats를 사용하면 좋은 확장 방법 OfForm을 사용할 수 있습니다.
- 1. <?의 차이점은 무엇입니까? echo __(); 및 <= __();
- 2. Response.Write와 <%= %>의 실제 차이점은 무엇입니까?
- 3. mysql에서 '! ='와 '<>'의 차이점은 무엇입니까
- 4. ASP.NET MVC에서 <% :와 <% =의 차이점은 무엇입니까?
- 5. <RequiredTargetFramework>와 <targetframeworkversion>의 차이점은 무엇입니까?
- 6. ASP.NET MVC에서 <% #와 <% =의 차이점은 무엇입니까?
- 7. ASP.NET MVC에서 <% =와 <% :?의 차이점은 무엇입니까?
- 8. 포함 된 VBScript에서 "<%"와 "<% ="의 차이점은 무엇입니까?
- 9. <%# %>과 <%= %>의 차이점은 무엇입니까?
- 10. <% # 및 <% = 시작 태그의 차이점은 무엇입니까?
- 11. class_eval과 class << className의 차이점은 무엇입니까?
- 12. 리스트 처리 방법 <Entity>,리스트 <Entity Id>,리스트 <Entity name> 효율적으로?
- 13. Ctrl + C와 Ctrl + [?]의 차이점은 무엇입니까? <kbd>Ctrl 키</kbd> + <kbd>C</kbd> 및 <kbd>Ctrl 키</kbd> + <kbd>[</kbd>의 차이점은 무엇
- 14. <리스트 반복자의 맵에 대한 연산자>
- 15. AI에서 <-의 의미는 무엇입니까?
- 16. 리스트 타입의 NHibernate 매핑 <Point>
- 17. 리스트 <T>이 해결되었습니다.
- 18. 리스트 지우기 문제 <T>
- 19. 리스트 <Rectangle> - 권투가있는 것처럼 동작합니다.
- 20. 최대 절전 모드,리스트 <String>
- 21. 리스트 <T> 'X'리스트 연결하기
- 22. 리스트 <something> 및 GridView 편집
- 23. <tiles:add>과 <tiles:put> 스트럿트의 차이점은 무엇입니까?
- 24. ruby에서 self.method와 클래스 << self 내 메소드의 차이점은 무엇입니까?
- 25. ofstream of "<<"과 Write의 차이점은 무엇입니까?
- 26. ASP.NET에서 <% # Bind ("") %>와 <% # Eval ("") %>의 차이점은 무엇입니까?
- 27. <input type = "button"/>과 <button>의 차이점은 무엇입니까?
- 28. <? php functionhere();의 차이점은 무엇입니까? ?> 및 <? = functionhere();?>
- 29. 의 차이점은 <jndi-name>이고 Jboss.xml의 <local-jndi-name>은 무엇입니까?
- 30. NUnit과의 Assert.Equals <p>의 차이점은 무엇입니까?</p>
좋은 답변입니다. 복싱/언 박싱을 염두에 두십시오. – Xaisoft