2009-06-19 3 views
1

Activator.CreateInstance의 결과를 인터페이스 유형으로 캐스팅 할 때 var 키워드를 사용하는 방법에 대해 몇 가지 질문이 있습니다. 내가 VAR을 알고있는 것처럼, 다음 코드 쌍은 VAR 버전 및 명시 적 유형 버전과 거의 동일하다 Activator.CreateInstance가있는 var 키워드?

// Direct cast 
var thing = (IThing)Activator.CreateInstance(Type.GetType(thingType)); 
IThing thing = (IThing)Activator.CreateInstance(Type.GetType(thingType)); 

// Casting with as 
var thing = Activator.CreateInstance(Type.GetType(thingType)) as IThing; 
IThing thing = Activator.CreateInstance(Type.GetType(thingType)) as IThing; 

가 거기에 내가 그 인텔리 또는 런타임 동작을 변경할 수 누락 어떤 미묘한 차이는?

+0

귀하의 마지막 문장은 약간의 차이를보고있는 의미 - 좀 더 구체적으로 할 수 있습니까? (또는 나는 그것으로 너무 많이 읽고 있냐?) – ChrisF

+0

* 나는 아무런 차이가 없지만, 동료와 함께 var의 장점에 대해 토론하고 있었다. 우리 둘 다 확실하지 않았고, 나는 오히려 미안하다는 것을 확신합니다. –

답변

0

var와 IThing은 동일합니다. 당신은 단지 3 키 스트로크를 저장합니다.

2

차이는 없습니다. 'var'키워드는 마술 같은 일을 전혀하지 않으며 컴파일 시간 형식 유추를 사용합니다. 이는 generics 작동 방법과 유사합니다.

일단 컴파일되면 차이가 없습니다. 변수 이름이 사용되는 변수 이름 위에 마우스를 가져 가면 IDE에서이를 증명할 수 있습니다 (선언 된 위치가 아닌 다른 곳). 유형을 보여주는 툴팁이 나타납니다. 두 변수 모두 위에 올릴 때 같은 유형이어야합니다.

+1

일리노이를 비교하는 것은 아무도 확신이없는 채로 남아 있으면 더 많은 증거가 될 것입니다. – AakashM

+0

일리노이가 더 나은 증거가 될 수 있지만 일리노이에 가고 싶지 않다면 IDE가 좋은 대안입니다. –

1

각각을 var 또는 IThing으로 선언하는 것은 동의어입니다.

캐스트와 as을 사용하는 경우에 차이가 있습니다. 변환하려는 항목이 아닌 경우 후자는 null을 반환합니다.

1

아니요 차이가 없습니다. 또한 var 키워드를 사용하는 데 문제가 없습니다. 가독성의 측면에서

, 다음 코드 줄을보고 당신은 쉽게 볼 수 마녀 Typevar입니다 :

var thing = (IThing)Activator.CreateInstance(Type.GetType(thingType)); 
var thing = Activator.CreateInstance(Type.GetType(thingType)) as IThing; 
+0

동의. 그것이 전체 토론에 관한 것입니다. 나는 var을 읽기가 더 쉬웠다 고 생각했다. 동료는 그것이 더 힘들다고 생각했다. 하지만 두 번째 줄에서는 명시 적 형식이 보증됩니다. 왜냐하면 캐스트되는 형식이 검색을 수행하는 것보다 훨씬 오른쪽에 있기 때문입니다. –