2010-07-02 6 views
4

저는 C#에 관한 책을 훑어보고 있는데, 나는 그것이 무엇인지 불확실하기 때문에 내가 찾지 못하는 것을 보았습니다. 또는 설명으로 무언가를 찾으려고합니다.(type) objectname.var의 (type)은 무엇입니까

일부는 나에게 무슨 일이 일어나고 있는지, 또는 (int) objectname.variablename과 같이 객체에 대한 참조 앞에 오는 "(type)"의 의미를 설명 할 수 있습니까?

내게 주연하는 것처럼 보입니다.

감사합니다.

편집 : 내가 추측하고 더 많은 코드가 필요할 때 대부분의 사용자가 캐스팅에 대한 '내'참조를 사용하지 않으므로이 질문을 제기 한 코드를 포함합니다. 나는 (int) numericupDown1.Value에 (int)를 질문하고있다.

private void numericUpDown1_ValueChanged(object sender, EventArgs e) 
{ 
    dinnerParty.NumberOfPeople = (int)numericUpDown1.Value; 
    DisplayDinnerPartyCost(); 
} 
+0

나는 그것을 얻지 않는다. .. 나는 그것이 무엇이 라는지 모른다. .. 그것은 나에게 던져 넣는 것처럼 보인다. 'C# casting'을 찾으려고 했습니까? 나는 또한 타입 괄호 검색을 시도하고 2, 3 번째 결과는 그것을 처리한다. –

+0

방금 ​​내 제안과 동일한 결과를 보았습니다. - 그리고 아니오, 내가 물어 본 내용을 어떻게 처리하는지 보지 못했습니다. – pghtech

답변

4

numericUpDown1.Value를 int 값으로 변환 (변환)합니다. 이것은 또한 내가 dinnerParty.NumberOfPeople는 정수 값입니다 있으리라 믿고있어 당신이 캐스팅하지 않았다 때문에 경우 제공된 값이 정수가 아닌 경우이 오류가 발생 할

Convert.toInt32(numericUpDown1.Value) 

를 사용하여 수행 할 수 있습니다. 예를 들어, 제공된 Value가 double이거나 문자열 인 경우 오류가 발생하고 캐스팅하면 double 20.5를 20으로 변환하여 받아들입니다. 문자열의 경우 문자열에 숫자가 들어있는 경우에 의존합니다. 문자열 "12"다음이 변환이며, 정수 (12)

에릭 Lippert의 다른 코멘트에 언급 된 (C 번호의 디자이너 중 하나)로
+0

이것이 맞습니다. 그러나, 나를 혼란스럽게 생각하는 것은 내가 numericUpDown1.Value 이 int가 될 것으로 예상한다는 것입니다. 그러나 MSDN "http://msdn.microsoft.com/en-us/library/system.windows.forms.numericupdown.value.aspx"설명을 읽는 것을 보면 Value가 십진 형식이라는 것을 알 수 있습니다. http://msdn.microsoft.com/en-us/library/system.windows.forms.numericupdown.increment.aspx – pghtech

+0

올바른 MSDN을 살펴본 후에 정수 값을 반환합니다. http://msdn.microsoft.com/en-us/library/system.windows.forms.listcontrol.selectedvalue.aspx – Gage

6

그것은 캐스팅, 런타임

+1

구체적으로 말해서, 명시 적 형변환 (명시 적 형변환)입니다. /msdn.microsoft.com/en-us/library/xhbhezf4(v=VS.80).aspx Implicit : http://msdn.microsoft.com/en-us/library/z5z9kes2(v=VS.80) .aspx – David

+8

@David : 아니, 명시 적 * 변환 *입니다.명시 적 및 암시 적 캐스트와 명시 적 및 암시 적 * 변환 *을 혼동하고 있습니다. 함축적 인 캐스트 *는 C#에서는 매우 드뭅니다. 사람들이 캐스트 연산자를 암시 적으로 사용하는 유일한 길은 foreach 루프에 있습니다. –

+0

@pghtech, C 또는 C++에서 "C 스타일 유형 캐스팅"을 수행했거나 Java로 캐스팅 한 적이 있다면, 이미이 기사에 상당히 익숙 할 것입니다. 나는 동일한 의미를 보장하는 언어 변호사로는 충분하지 않지만 C# 캐스팅은 Java의 캐스팅과 유사합니다. – apollodude217

2

네 말이 맞아에서 유형 (유형)에 variableName은 캐스팅을 시도하고 있습니다. 그것은 주조입니다.

2

관련된 유형을 모른 채 정확하게 무슨 일이 일어나고 있는지 말하기는 어렵습니다.

주조 명시 적으로 하나 개의 유형에서 다른 변환 연산자를 호출합니다 : http://msdn.microsoft.com/en-us/library/ms173105(VS.80).aspx

그러나 그것은 언 박싱 또는 명시 적 복싱이 될 수 있습니다. Boxing/Unboxing은 값 유형을 힙에 저장하는 비싼 방법입니다. http://msdn.microsoft.com/en-us/library/yz2be5wk.aspx

1

로 변환 할 위에서 언급 한 변환 방법을 사용했다면 - 한 유형에서 다른 유형으로 변환.

아니요 주조입니다. 캐스팅은 컴파일러가 어떤 타입인지 알지 못하는 C의 남은 개념이다. 캐스트는 변수를 해석하는 방법을 컴파일러에 알리는 메시지였습니다.

+0

의 줄을 더 생각하고 있었는데 그게 더 많은 남은 용어이지만 그 중 하나입니다. C# 프로그래머 가이드는 여전히 사용합니다. "데이터 형식 사이의 변환은 캐스트를 사용하여 명시 적으로 수행 할 수 있지만 경우에 따라 암시 적 변환이 허용됩니다." –

+3

아니요, 원래 포스터가 실제로 캐스팅되었습니다. 여기에서 호출하려고하는 (그리고 분명히 실패한) 차이점은 캐스팅이 구문 론적 인 것인데, 캐스팅 연산자 *를 사용한다는 것입니다. 변환은 * 시맨틱 *입니다. 이것은 유형 대수 연산입니다. (구문 적) 캐스트는 사용자가 변환을 원한다는 것을 나타냅니다. 이 변환은 암시 적 변환 또는 명시 적 변환이 될 수 있으며 표현 보존 또는 표현 변경이 될 수 있습니다. –

+1

일반적으로 구문 요소 인 캐스트가 코드에 직접 나타납니다. 그러나 컴파일러가 명시 적 변환을 수행하기 위해 자동으로 캐스트 연산자를 삽입하는 드문 경우가 있습니다. 가장 일반적인 것 중 하나는 "foreach (myAnimals의 Giraffe g)"입니다. 많은 사람들은 이것을 "호랑이를 걸러 내기"와 동등한 것으로 생각하지만, 실제로 "나오는 각 일에 캐스트 연산자를 넣고 예외를 throw합니다 명시 적 변환이 실패한 경우. " –

관련 문제