2013-12-18 1 views
-6

타입 추론 : 선언의 초기화 프로그램은 추론 엔진을 구동하는 데 사용되며 필수입니다. 따라서 다음은 위법입니다 :타입 추론 : 선언의 초기화 프로그램은 추론 엔진을 구동하는 데 사용되며 반드시 필요합니다.

var obj2 ://ERROR :must have an intializer 
var obj3=null :ERROR :must have a specific type 

추론이 성공적으로 가정하면, 추론 유형이 감지 컴파일러에 의해보고 된 유형의 평소 명백한 오용 영구 및 컴파일 진행된다 :

var obj4 ="hi!"; 
obj4.Close();//Oops,wrong object!(Error:'string does not contain' 'Close') 

의 개념 VAR을 혼동하지 마십시오 VB 변형 (그것의 아닙니다) 또는 w ith javascript (var는 실제로 객체를 의미 함)와 같은 동적 언어로 var의 개념을 ith. 변수의 유형이 변경 될 수 있으므로 런타임시 유형 검사가 수행되므로 안전성 비용이 증가 된 유연성이 향상됩니다. 유형을 변경할 수없고 유추 타입이 객체 인 경우 모든 유형 검사는 컴파일 거라구 예에서 이루어집니다 # 3.0 c를 당신이 vaery 작은 기능의 obect 참조하여 결국에, (아래 obj6 만) : 내가 느끼는

object obj5="hi"; //obj5 references the string "hi!",but type is object 
var obj6 =obj5; //obj6 also references "hi!",with inferred type object 
. 
. 
. 

string si=obj6.ToUpper(); //ERROR:'object' does not contain 'ToUpper' 
+2

결정한다 달성하기 위해? – haim770

+2

# 1은'var'에 문제가 없으므로'string'을'object'에 넣고'string' 메소드를 호출 할 때 문제가됩니다. # 2는 존재하지 않는 메소드를 호출하려는 것입니다. 뭐가 문제 야? – Rawling

+1

그것은 var 키워드의 제한이 아니라 var 키워드에 대한 이해입니다. 두 가지 오류 모두 완벽합니다. –

답변

3

귀하의 질문은 명확하지 않지만 ..

모든 유형은 Object 클래스에서 파생되었으므로 object obj="mukesh"이라고 말하면 objobject, 아니요 t . 당신이 var name = obj;을 말할 때 objobject (당신이 그것을에 저장할 변수의 종류를 알 수 없다) 때문에, nameobject 될 것입니다 이유

.

var string_value = "mukesh";이라고 말하면 string_valuestring입니다 (분명합니다). String 클래스에는 Close()이라는 메서드가 없습니다.

예 :

var obj = "mukesh"; 
string sTest = obj.ToUpper(); 

작품 완벽 var"mukesh"를보고는 말한다 때문에 :

는 "이봐이 문자열, 그래서 컴파일러는 문자열 형식으로 OBJ를해야한다"그것의

0

var 암시 적으로 유형이 지정된 로컬 변수는 사용자가 유형을 직접 선언 한 것처럼 강력하게 유형화되지만 컴파일러가 유형을 결정합니다. i의 다음 두 선언은 기능적으로 동일하다 : 당신이 당신의 객체의 close 메소드가없는 경우

var i = 10; // implicitly typed 
int i = 10; //explicitly typed 

이 때문에 intelisense이`) (`닫기 그리고 당신이 정확히 무엇을하려고하는 어떤이