C#
최신 C# 기능
C# 11
C# 11 새기능
C# 11: Raw String Literal
C# 11: 문자열 내삽 복수라인
C# 11: u8 접미어
C# 11: Generic Math 지원
C# 11: Generic Attribute
C# 11: 리스트 패턴
C# 11: 파일 로컬 타입
C# 11: required modifier
C# 11: Auto-default struct
C# 11: ReadOnlySpan 패턴 매칭
C# 11: 확장된 nameof 범위
C# 11: nint, nuint
C# 11: ref 필드
C# 11: 소문자 타입명 경고
C# 11: 향상된 method group 변환
C# 10
VS 2022 설치
C# 10 global using
C# 10 File-scoped Namespace
C# 10 향상된 문자열 내삽
C# 10 향상된 람다식 유추
C# 10 struct 기능 향상
C# 10 record struct
C# 10 확장된 속성패턴
C# 10 향상된 명료한 할당
C# 10 Destructor 기능 개선
C# 9.0
C# 9 레코드 타입
C# 9 init accessor
C# 9 최상위 프로그램
C# 9 향상된 패턴 매칭
C# 9 향상된 Target Typing
C# 9 공변 리턴 타입
C# 9 Native Int 타입
C# 8.0
C# 8 디폴트 인터페이스 멤버
C# 8 패턴 매칭
C# 8 Nullable Reference Type
C# 8 인덱싱과 슬라이싱
C# 8 비동기 스트림
C# 8 using 선언
C# 8 널 병합 할당자
C# 8 구조체 읽기 전용 멤버
C# 8 기타 기능들
C# 7.0
C# 7.0 새기능
C# 7.0 패턴 매칭
C# 7.0 튜플
C# 7.0 로컬 함수
C# 7.0 out 파라미터
C# 7.0 리터럴 표현
C# 7.0 Deconstructor
C# 7.0 ref return
C# 7.0 async 리턴타입
C# 7.0 Expression-bodied
C# 7.0 throw expression
C# 6.0
C# 6.0 새기능
C# 6.0 널 조건 연산자
C# 6.0 문자열 내삽
C# 6.0 Dictionary초기자
C# 6.0 nameof 연산자
C# 6.0 using static문
C# 6.0 catch블럭 await
C# 6.0 Exception 필터
C# 6.0 자동 속성 초기자
C# 6.0 읽기전용 자동 속성
C# 6.0 Expression-bodied

C#으로 이해하는 자료구조
C# 프로그래밍 기초 실습 전자책
C# 9.0: Native Int 타입 (nint, nuint)

Native Int란 플랫폼에 따라 다른 크기를 갖는 정수를 말하는데, 예를 들어 32비트 플랫폼에서는 32비트 정수가 되고, 64비트 플랫폼에서는 64비트 정수가 된다. C# 9에서 Native Int를 지원하기 위해 nint와 nuint 라는 새로운 키워드를 도입하였다. nint는 부호(sign)를 갖는 Native Int 타입이고, nuint는 unsigned int 타입의 Native Int 타입을 가리킨다. Native Int는 주로 Unmanaged 코드와의 연동이나 저수준 라이브러리에서 유용하게 사용될 수 있다.

아래 예제에서처럼 nint를 32비트로 컴파일했을 때는 32비트 (4 바이트)의 정수가 되고, 64비트로 컴파일했을 때는 64비트 (8바이트)의 정수가 된다.


예제

//(1) 32bit로 컴파일되었을 때 4바이트 정수
nint a = 100;

//(2) 64bit로 컴파일되었을 때 8바이트 정수
nint b = 100;




nint, nuint의 연산

플랫폼에 따라 다른 크기의 정수를 가졌던 것으로 기존에 System.IntPtr과 System.UIntPtr 들이 있었는데, 이들은 주로 포인터나 핸들을 담는 용도로 사용되었으며, 간단한 포인터 주소 연산이나 동일성(Equals) 비교 등의 제한된 기능만을 가지고 있었다. C# 9의 Native Int 타입인 nint, nuint은 기본적으로 System.IntPtr, System.UIntPtr 타입에 기초한 것으로, 컴파일러가 보다 다양한 연산이나 크기 비교 연산 등을 지원한 것이다.

예제

static void Main(string[] args)
{
    nint a = 5;
    int b = 10;

    nint c = a + b;
    Console.WriteLine(typeof(nint)); // System.IntPtr

    long d = 15;
    if (a < d)
    {
        Console.WriteLine(a + d); // 20
    }
}



본 웹사이트는 광고를 포함하고 있습니다. 광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.