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# 11: nint, nuint 데이타 타입

C# 11에서 nint 라는 새로운 키워드가 도입되었는데, 이는 System.IntPtr 데이타 타입의 Alias이다. C#의 int가 System.Int32와 동일한 타입으로 사용되듯이, nint는 System.IntPtr와 동일하게 사용된다. 마찬가지로 C# 11의 nuint는 System.UIntPtr 데이타 타입의 Alias인데, nint는 부호가 있는 정수이고, nuint는 부호가 없는 양의 정수이다.

nint (System.IntPtr) 데이타 타입은 int와 같이 정수값을 갖지만, 다른 점은 32bit 프로세스에서는 32bit 정수를 갖고 64bit 프로세스에서는 64bit 크기의 정수값을 갖는다는 것이다. 일반적으로 nint (System.IntPtr) 타입은 포인터값이나 핸들(handle)값을 저장할 때 사용한다.

아래는 nint 변수에 포인터를 할당하는 예제로서, Marshal.StringToHGlobalAnsi() 메서드가 리턴하는 Unmanaged Memory의 포인터 값을 nint (IntPtr)에 저장하게 된다.


예제

string s = "Hello World";

// C# 11: nint에 포인터를 저장
// allocate unmanaged memory(HGlobal) and copy managed String into unmanaged memory
nint ptr = Marshal.StringToHGlobalAnsi(s);

// allocate managed String and copy unmanaged string to managed string
string s2 = Marshal.PtrToStringAnsi(ptr);
Console.WriteLine(s2);

Marshal.FreeHGlobal(ptr);




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