it-swarm-ko.tech

int 또는 Int32를 사용해야합니까?

C #에서 intInt32는 같은 것입니다. 그러나 intInt32보다 선호되는 이유는 무엇이든 여러 번 읽었습니다. 이유가 있을까요?

339
Graham

ECMA-334 : 2006 C # 언어 사양 (p18) :

사전 정의 된 각 유형은 시스템 제공 유형의 단축형입니다. 예를 들어 int 키워드는 struct System.Int32를 참조합니다. 스타일의 문제로서 전체 시스템 유형 이름을 사용하는 것보다 키워드 사용이 선호됩니다.

125
SpaceghostAli

이 둘은 실제로 동의어입니다. int은 좀 더 익숙 할 것입니다. Int32는 32 비트를 코드를 읽는 사람들에게 더 분명하게 만듭니다. 나는 int을 사용해야 할 것입니다. 여기서 Int32는 크기가 중요합니다 (암호화 코드, 구조체). 그래서 미래의 유지 관리자는 적절하다면 int을 늘리는 것이 안전하다는 것을 알게 될 것입니다. 그러나 Int32s를 변경해야합니다. 같은 길.

결과 코드는 동일합니다. 차이점은 순전히 가독성 또는 코드 모양 중 하나입니다.

265
James Sutherland

둘 다 32 비트 정수를 선언하고 다른 포스터가 명시한 바와 같이 어느 것이 주로 구문 스타일의 문제인지를 나타냅니다. 그러나 그들은 항상 같은 방식으로 행동하지는 않습니다. 예를 들어, C # 컴파일러는 이것을 허용하지 않습니다 :

public enum MyEnum : Int32
{
    member1 = 0
}

그러나 이것을 허용 할 것이다 :

public enum MyEnum : int
{
    member1 = 0
}

그림을 이동.

84
raven

저는 항상 시스템 유형 (예 : int 대신 Int32)을 사용합니다. 제프리 리히터 (Jeffrey Richter)는 전체 유형 이름을 사용하는 좋은 사례를 보여줍니다 . Applied .NET Framework Programming . 여기 나와 관련된 두 가지 점이 있습니다.

  1. 형식 이름은 .NET 언어에 따라 다를 수 있습니다. 예를 들어 C #에서는 long이 System.Int64에 매핑되고 C++에서는 관리되는 확장이 있고 long은 Int32에 매핑됩니다. .NET을 사용하는 동안 언어가 혼합되어 매치 될 수 있기 때문에 독자가 선호하는 언어와 상관없이 명시적인 클래스 이름을 사용하면 항상 명확 해집니다.

  2. 많은 프레임 워크 메소드에는 메소드 이름의 일부로 유형 이름이 있습니다.

    BinaryReader br = new BinaryReader( /* ... */ );

    float val = br.ReadSingle(); // OK, but it looks a little odd...

    Single val = br.ReadSingle(); // OK, and is easier to read

48
Remi Despres-Smyth

int는 C # 키워드이며 모호하지 않습니다.

대부분의 경우 중요하지 않지만 Int32를 상대로하는 두 가지 사항은 다음과 같습니다.

  • "시스템 사용"이 필요합니다. 성명서. "int"를 사용하면 using 문이 필요 없습니다.
  • Int32라는 클래스를 정의 할 수 있습니다 (바보 같고 혼란 스러울 수 있습니다). int는 항상 int를 의미합니다.
20
Brownie

이미 설명한 바와 같이 int = Int32. 안전을 위해 데이터 유형 경계를 염려하는 것을 구현할 때는 항상 int.MinValue/int.MaxValue를 사용해야합니다. .NET에서 int이 (가) Int64가 될 것이라고 결정하면 코드가 경계에 덜 의존하게됩니다.

13
spoulson

단일 언어 (수학 오버플로에 대해 생각 나게하지 않아도되는 코드) 만 처리하면 형식에 대한 바이트 크기가 너무 흥미롭지 않습니다. 흥미로운 부분은 한 언어에서 다른 언어로, C #에서 COM 객체로 또는 다른 비트 시프 팅이나 마스킹을 할 때 자신과 (코드 리뷰 공동 웨어커) 데이터 크기의.

실제로는 Int32를 사용하여 관리되는 C++ (예 : C #에 연결)과 관리되지 않는/원시 C++을 작성하기 때문에 보통 크기가 무엇인지 상기시키기 위해 사용합니다.

C #에서는 64 비트이지만 네이티브 C++에서는 32 비트로 끝나거나 char은 유니 코드/16 비트이지만 C++에서는 8 비트입니다. 그러나 우리는 이것을 어떻게 알 수 있습니까? 우리가 매뉴얼에서 찾아 보았 기 때문에 대답은 그렇습니다.

시간과 경험으로 C #과 다른 언어를 연결하는 코드를 작성할 때 더 양심적 인 자세를 취할 것입니다. (일부 독자는 "왜 그렇게 생각하십니까?")하지만 IMHO는 더 나은 방법이라고 생각합니다. 나는 지난주에 코딩 한 것을 기억하지 못합니다 (또는 API 문서에서 "이 매개 변수는 32 비트 정수"라고 지정할 필요가 없습니다).

F # (결코 사용한 적이 없지만)은 int, int32nativeint를 정의합니다. 동일한 질문이 제기되어야합니다. "나는 사용합니까?" 다른 사람들이 언급했듯이, 대부분의 경우 중요하지 않습니다 (투명해야합니다). 그러나 나는 모호성을 제거하기 위해 int32와 uint32를 선택할 것입니다.

내 생각에 코딩하는 응용 프로그램, 사용하는 사람, 사용자 및 팀이 따르는 코딩 방법 등에 따라 Int32를 사용해야 할 때를 정당화 할 수 있습니다.

9
HidekiAI

intInt32에는 차이가 없지만 int은 (stringString과 마찬가지로) 많은 사람들이 선호하는 언어 키워드입니다.

8
Simon Steele

제 경험상 컨벤션이되었습니다. Int32를 통해 int를 사용하는 기술적 인 이유는 모르지만 다음과 같습니다.

  1. 더 빨리 입력하십시오.
  2. 일반적인 C # 개발자에게 익숙합니다.
  3. 기본 Visual Studio 구문 강조 표시에서 다른 색상입니다.

나는 특히 그 마지막 것을 좋아한다. :)

7
Greg D

변수를 정의 할 때 항상 별칭이 지정된 유형 (int, string 등)을 사용하고 정적 메서드에 액세스 할 때 실제 이름을 사용합니다.

int x, y;
...
String.Format ("{0}x{1}", x, y);

Int.TryParse ()와 같은 것을 보는 것은보기 흉한 것처럼 보입니다. 스타일 이외의 다른 이유가 없습니다.

6
Mark A. Nicolosi

비록 (대부분) 동일하지만 (아래의 하나의 [버그] 차이점을 참고하십시오), 반드시주의해야하며 Int32를 사용해야합니다.

  • 16 비트 정수의 이름은 Int16입니다. 64 비트 정수의 경우 Int64, 32 비트 정수의 경우 직관적 인 선택은 int 또는 Int32입니까?

  • Int16, Int32 또는 Int64 유형의 변수 크기에 대한 질문은 자체 참조이지만 int 유형 변수의 크기에 대한 질문은 완벽하고 유효한 질문이며 문제는 아무리 사소한 것이 든 혼란 스럽습니다. 혼란, 시간 낭비, 토론 방해 등이 있습니다 (이 질문이 실제로 있다는 사실은 그 사실을 증명합니다).

  • Int32를 사용하면 개발자가 자신이 선택한 형식을 의식하고 있음을 알 수 있습니다. int가 얼마나 큰가? 오, 예, 32. 크기가 이름에 포함되면 유형의 크기가 실제로 고려 될 가능성이 커집니다. Int32를 사용하면 다른 선택에 대한 정보도 얻을 수 있습니다. 사람들이 적어도 대안이 있다는 것을 인식하지 못하게되면 int가 "정수형"이되기가 너무 쉬워집니다.

  • 32 비트 정수와 상호 작용하기위한 프레임 워크 내의 클래스 이름은 Int32입니다. 다시 한 번, 더 직관적이고 덜 혼동스럽고 (불필요한) 번역 (시스템의 번역이 아니라 개발자의 마음에있는 번역)이 부족합니다. int lMax = Int32.MaxValue 또는 Int32 lMax = Int32.MaxValue?

  • int는 모든 .NET 언어에서 키워드가 아닙니다.

  • 절대 변경되지 않는 이유가 있지만 int는 항상 Int32가 아닐 수도 있습니다.

단점은 두 개의 추가 문자와 [버그]입니다.

이것은 컴파일되지 않습니다.

public enum MyEnum : Int32
{
    AEnum = 0
}

그러나 이것은 :

public enum MyEnum : int
{
    AEnum = 0
}
5
unknown (yahoo)

모범 사례는 int를 사용하는 것이고 모든 MSDN 코드는 int를 사용한다는 것을 알고 있습니다. 그러나 내가 아는 한 표준화와 일관성을 넘어서는 이유는 없습니다.

5
Raithlin

당신은 신경 쓰지 않아야합니다. 대부분 int을 사용해야합니다. 앞으로 더 넓은 아키텍처로 프로그램을 이식하는 데 도움이 될 것입니다 (현재 intSystem.Int32의 별칭이지만 변경 될 수 있습니다). 변수의 비트 폭 (예 : struct의 메모리에서 레이아웃을 제어하는 ​​경우)에만 int32 및 기타 (연관된 "using System;")를 사용해야합니다.

4
yhdezalvarez

Microsoft의 StyleCop 를 사용하는 것이 좋습니다.

FxCop 과 비슷하지만 스타일 관련 문제가 있습니다. 기본 구성은 Microsoft의 내부 스타일 가이드와 일치하지만 프로젝트에 맞게 사용자 지정할 수 있습니다.

익숙해지기까지 약간의 시간이 걸릴 수 있지만 코드를 더 멋지게 만듭니다.

빌드 프로세스에이를 포함시켜 위반 사항을 자동으로 확인할 수 있습니다.

3
devstuff

int는 System.Int32와 같으며 컴파일 될 때 CIL 에서 같은 결과가됩니다.

C #에서 C # 및 C++ (및 Java)처럼 보이기를 원하기 때문에 우리는 C #에서 규칙을 사용하여 int를 사용합니다.

BTW, 다양한 Windows API 함수 가져 오기 선언 할 때 System.Int32 사용하여 끝납니다. 이것이 정의 된 컨벤션인지 아닌지는 잘 모르겠지만 외부 DLL로 갈 것이라고 생각합니다.

3
Jack Bolding

옛날에는 int 데이터 유형이 컴파일러가 대상으로하는 머신의 레지스터 크기에 고정되어있었습니다. 예를 들어, 16 비트 시스템 용 컴파일러는 16 비트 정수를 사용합니다.

그러나 고맙게도 16 비트는 더 이상 보지 못했고, 64 비트가 인기를 얻기 시작했을 때 구형 소프트웨어와 호환되도록하는 데 더 많은 관심을 기울 였고 32 비트는 대부분의 컴파일러에서 오랫동안 사용되어 왔습니다. int는 32 비트라고 가정합니다.

3
Joel Coehoorn

int는 C # 언어의 System.Int32에 대한 바로 가기입니다.

이것이 Microsoft가이 매핑을 변경할 수 있다는 것을 의미하는 반면, FogCreek의 토론에 대한 게시물은 [source]

"64 비트 문제에서 - Microsoft는 실제로 64 비트 버전의 .NET Framework에서 작업하고 있지만 int가 해당 시스템에서 64 비트로 매핑되지 않을 것이라고 확신합니다.

이유 :

1. C # ECMA 표준은 특히 int가 32 비트이고 long이 64 비트라고 말합니다.

2. Microsoft는 Framework 버전 1.1에서 Array.GetLength 외에도 Array.GetLongLength와 같이 int 값 대신 long 값을 반환하는 추가 속성과 메서드를 도입했습니다.

모든 내장 C # 유형이 현재 매핑을 유지한다고 말하는 것이 안전하다고 생각합니다. "

3
Ray Hayes

당신은 신경 쓰지 않아야합니다. 크기가 걱정된다면 byte, short, int, long을 사용할 것입니다. int32보다 큰 int를 사용하는 유일한 이유는 2147483647보다 높거나 -2147483648보다 낮은 숫자가 필요한 경우입니다.

내가 신경 쓰지 않는 것 외에도 걱정해야 할 다른 많은 것들이 있습니다.

2
David Basarab

intInt32는 같습니다. intInt32의 별칭입니다.

2
Jesper Kihlberg

그것은 실천에 아무런 차이가 없으며, 시간 내에 자신의 대회를 채택 할 것입니다. 유형을 지정할 때 키워드를 사용하는 경향이 있으며 정적 메소드 등을 사용할 때 클래스 버전을 사용하는 경향이 있습니다.

int total = Int32.Parse ( "1009");

2
chrisb

int은이 테이블에 정의 된대로 System.Int32의 별칭입니다. 기본 제공 유형 테이블 (C # Reference)

1
Jim T

Int 또는 Int32를 사용하는 것은 똑같습니다. Int는 독자를위한 코드를 단순화하기위한 설탕입니다.

Nullable 변형 Int를 사용합니까? 또는 Int32? null이 포함 된 필드에서 데이터베이스를 사용하여 작업 할 때. 그렇게하면 많은 런타임 문제에서 당신을 구할 수 있습니다.

0
bovium

얼마 전에 Microsoft .NET CLR 제품 팀을 방문하여 Microsoft와 프로젝트를 진행했습니다. 이 사람은 예제를 코드화했으며 변수를 정의 할 때 "Int32"대 "int"및 "String"대 "string"을 사용했습니다.

Microsoft의 다른 예제 코드에서이 스타일을 본 것을 기억했습니다. 그래서 저는 약간의 연구를했고, 모두가 "Int32"와 "int"사이에 구문 색상 지정을 제외하고 차이가 없다고 말합니다. 실제로 "Int32"를 사용하여 코드를보다 쉽게 ​​읽을 수 있도록하는 많은 자료를 발견했습니다. 그래서 저는 그 스타일을 채택했습니다.

다른 날에 나는 차이를 찾았다! 컴파일러에서는 "Int32"를 사용하여 enum을 입력하는 것을 허용하지 않지만 "int"를 사용할 때는 수행합니다. 내가 아직 모르기 때문에 왜 저에게 묻지 마십시오.

예:

public  enum MyEnum : Int32
{
    AEnum = 0
}

이 작동합니다.

public enum MyEnum : int
{
    AEnum = 0
}

가져온 것 : Int32 표기법 vs. int

0
Schmuli

일부 컴파일러는 다른 플랫폼에서 int 크기가 다릅니다 (C #과 관련 없음).

일부 코딩 표준 (MISRA C)은 사용 된 모든 유형이 지정된 크기 (즉 Int32 및 int가 아님)를 요구합니다.

다른 유형 변수에 접두사를 지정하는 것도 좋습니다 (예 : 8 비트 바이트의 경우 b, 16 비트 워드의 경우 w, 32 비트 길이의 경우 Word => Int32 lMyVariable)

코드가 더 이식성 있고 관리하기 쉬워 지므로주의해야합니다.

C #을 항상 사용하고 C # 사양이 절대로 변경되지 않으면 C #에 Portable이 적용되지 않을 수 있습니다.

유지 보수 가능한 ihmo는 항상 적용될 것입니다. 왜냐하면 코드를 관리하는 사람이이 C # 스펙을 인식하지 못할 수도 있고, int occasionaly가 2147483647 이상이되는 버그를 놓칠 수 있기 때문입니다.

예를 들어 달을 계산하는 간단한 for-loop에서주의를 기울이지 않지만 owerflow가 발생할 수있는 컨텍스트에서 변수를 사용할 때는주의해야합니다.

비트 연산을 수행 할 것인지 여부도 신경 써야합니다.

0
user11211

매우 특정한 수학 함수 나 특정 아키텍처에 최적화 된 코드를 작성해야하는 경우가 아니라면 대부분의 프로그래밍 언어를 신경 써서는 안됩니다 ... 형식의 크기가 충분하다는 것을 확인하십시오. know 예를 들어 32 비트 이상 필요합니다.

0
Stacker

Int32 유형을 사용하려면 System에 대한 네임 스페이스 참조가 필요하거나 완전히 한정적 (System.Int32)이어야합니다. 네임 스페이스 가져 오기가 필요하지 않으므로 int을 사용하는 경향이 있으므로 일부 경우 네임 스페이스 충돌 가능성이 줄어 듭니다. 일리노이로 컴파일 할 때, 둘 사이에는 차이가 없습니다.

0
Michael Meadows

그건 중요하지 않아. int는 language 키워드이고 Int32는 실제 시스템 유형입니다.

또한 my 대답은 여기에 나와 있습니다 관련 질문을 참조하십시오.

0
Keith

Visual Studio 2012의 직접 실행 창에 따르면 Int32는 int이며 Int64는 길다. 출력은 다음과 같습니다.

sizeof(int)
4
sizeof(Int32)
4
sizeof(Int64)
8
Int32
int
    base {System.ValueType}: System.ValueType
    MaxValue: 2147483647
    MinValue: -2147483648
Int64
long
    base {System.ValueType}: System.ValueType
    MaxValue: 9223372036854775807
    MinValue: -9223372036854775808
int
int
    base {System.ValueType}: System.ValueType
    MaxValue: 2147483647
    MinValue: -2147483648
0
Selim

또한 Int16을 고려하십시오. 응용 프로그램의 메모리에 Integer를 저장해야하고 사용하는 메모리 양에 대해 염려가된다면 Int16보다 더 적은 memeory를 사용하고 int/32보다 최소/최대 범위가 작기 때문에 Int16을 사용할 수 있습니다 .)

0
Chris Pietschmann