나는 대답을 찾지 못했습니다.Java for 루프 VS .NET foreach 루프
class Car {
/* car stuff */
}
그리고 자바
class Truck extends Car {
/* truck stuff */
}
다음 작품 잘 C#에서 C#
class Truck : Car {
/* truck stuff again */
}
에서 :
의 우리가 자바 나 C#을 하나에서 다음과 같은 코드가 있다고 가정 해 봅시다List<Car> carList = new List<Car>();
//add some objects to the collection
foreach(Truck t in carList)
//do stuff with only the Truck objects in the carList collection
이 작업은 Truck이 Car의 하위 클래스이기 때문에 간단한 용어로 각 트럭이 Car이라는 의미입니다. 문제는 그 유형 검사가 완료되고 trucks 만 carList에서 선택된다는 것입니다. 우리가 자바에서 같은 일을하려고하면
: 때문에 강화 된 루프 내부의 코드의
List<Car> carList = new ArrayList<Car>();
//add some objects to the collection
for(Truck t : carList)
//**PROBLEM**
를, 코드도 컴파일되지 않습니다. 대신 우리는 같은 효과를 얻기 위해 이런 일을 할 필요가 :
for(Car t : carList)
if(t instanceof Car)
//cast t to Truck and do truck stuff with it
그것은 C에서 #은 아무 문제없이 작동하는 같은 생각이지만, 자바에서 당신은 여분의 코드가 필요합니다. 구문조차도 거의 같습니다! Java에서 작동하지 않는 이유가 있습니까?
이것은 또한 C#에서 그렇게 깨끗하지 않다 정말 신중하다. Java는 더 신중 해 보이며 프로그래머가 먼저 확인하기를 원합니다 (물론 C# 버전은 자신이하는 일을 알고있는 경우 이점을 추가합니다). –
C#에서 각 개체의 형식이 검사됩니다. 트럭 인 경우 foreach 루프의 본문이 입력되고 그렇지 않은 경우 루프가 시작됩니다. 그것에 대해 깨끗하지 않은 것은 무엇입니까?내가 (Java)를 체크하거나 런타임이 그것을 체크 (C#)하면 그것은 같은 최종 결과이다. – alegen
@alegen, 그건 사실이 아닙니다. –