Microsoft MVP성태의 닷넷 이야기
.NET Framework: 1182. C# 11 - ref struct에 ref 필드를 허용 [링크 복사], [링크+제목 복사]
조회: 1494
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 

C# 11 - ref struct에 ref 필드를 허용

C# 7.2에 추가된,

C# 7.2 - 스택에만 생성할 수 있는 값 타입 지원 - "ref struct"
; https://www.sysnet.pe.kr/2/0/11530

ref struct 유형으로 Span<T> 타입이 있었고,

C# 7.2 - Span<T>
; https://www.sysnet.pe.kr/2/0/11534

이 타입의 경우, 특이하게 내부 필드로 ref 필드를 포함하고 있었습니다.

public readonly ref struct Span<T>
{
  private readonly ref T _pointer;
  private readonly int _length;
  ...
}

그러면서 제가 "C# 7.2 - Span<T>" 글에서 다음과 같이 언급했었는데요,

개인적으로 처음 ref struct를 봤을 때 System.TypedReference와 같은 타입을 이제 C#으로도 정의할 수 있게 길을 열어주는 것이 아닌가 생각했었습니다.


바로 저걸, C# 11에서 추가한 것이 "ref 필드"입니다.




서론이 길었지만, 결국 C# 11에서 다음과 같은 문법을 허용한다는 것입니다.

ref struct Vector
{
    public ref int X;
}

기존의 ref 로컬 변수와 마찬가지로, ref 필드는 스택상에만 존재하는 것을 허용하기 때문에 반드시 ref struct 유형인 경우에만 포함할 수 있습니다.

아쉽게도 아직 이 문법은 구현 중이기 때문에 Visual Studio 2022 Preview 버전에서 테스트할 수 없습니다. 나중에 구현이 완료돼 비주얼 스튜디오에서도 컴파일이 가능하면 그때 다시 또 첨언을 하겠습니다. ^^ (Visual Studio 2022 17.3 이후 버전에서 테스트할 수 있습니다.)




C# 11 - ref 필드(공식 문서, ref fields)
; https://www.sysnet.pe.kr/2/0/13015

Language Feature Status
; https://github.com/dotnet/roslyn/blob/main/docs/Language%20Feature%20Status.md




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]

[연관 글]






[최초 등록일: ]
[최종 수정일: 8/10/2022]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 



2022-08-12 09시44분
정성태

[1]  2  3  4  5  6  7  8  9  10  11  12  13  14  15  ...
NoWriterDateCnt.TitleFile(s)
13129정성태9/27/202227.NET Framework: 2050. .NET Core를 IIS에서 호스팅하는 경우 .NET Framework CLR이 함께 로드되는 환경
13128정성태9/23/202285C/C++: 158. Visual C++ - IDL 구문 중 "unsigned long"을 인식하지 못하는 #import파일 다운로드1
13127정성태9/22/2022120Windows: 210. WSL에 systemd 도입
13126정성태9/15/2022458.NET Framework: 2049. C# 11 - 정적 메서드에 대한 delegate 처리 시 cache 적용
13125정성태9/14/2022519.NET Framework: 2048. C# 11 - 구조체 필드의 자동 초기화(auto-default structs)
13124정성태9/13/2022356.NET Framework: 2047. Golang, Python, C#에서의 CRC32 사용
13123정성태9/8/2022573.NET Framework: 2046. C# 11 - 멤버(속성/필드)에 지정할 수 있는 required 예약어 추가
13122정성태8/26/2022695.NET Framework: 2045. C# 11 - 메서드 매개 변수에 대한 nameof 지원
13121정성태8/23/2022532C/C++: 157. Golang - 구조체의 slice 필드를 Reflection을 이용해 변경하는 방법
13120정성태8/19/2022565Windows: 209. Windows NT Service에서 UI를 다루는 방법
13119정성태8/18/2022617.NET Framework: 2044. .NET Core/5+ 프로젝트에서 참조 DLL이 보관된 공통 디렉터리를 지정하는 방법
13118정성태8/18/2022597.NET Framework: 2043. WPF Color의 기본 색 영역은 (sRGB가 아닌) scRGB [2]
13117정성태8/17/2022697.NET Framework: 2042. C# 11 - 파일 범위 내에서 유효한 타입 정의 (File-local types)파일 다운로드1
13116정성태8/4/2022754.NET Framework: 2041. C# - Socket.Close 시 Socket.Receive 메서드에서 예외가 발생하는 문제파일 다운로드1
13115정성태8/3/20221000.NET Framework: 2040. C# - ValueTask와 Task의 성능 비교 [1]파일 다운로드1
13114정성태8/2/2022885.NET Framework: 2039. C# - Task와 비교해 본 ValueTask 사용법파일 다운로드1
13113정성태7/31/2022814.NET Framework: 2038. C# 11 - Span 타입에 대한 패턴 매칭 (Pattern matching on ReadOnlySpan<char>)
13112정성태7/30/2022905.NET Framework: 2037. C# 11 - 목록 패턴(List patterns) [1]파일 다운로드1
13111정성태7/29/2022836.NET Framework: 2036. C# 11 - IntPtr/UIntPtr과 nint/nuint의 통합파일 다운로드1
13110정성태7/27/2022953.NET Framework: 2035. C# 11 - 새로운 연산자 ">>>" (Unsigned Right Shift)파일 다운로드1
13109정성태7/27/2022760VS.NET IDE: 177. 비주얼 스튜디오 2022를 이용한 (소스 코드가 없는) 닷넷 모듈 디버깅 - "외부 원본(External Sources)"
13108정성태7/26/2022694Linux: 53. container에 실행 중인 Golang 프로세스를 디버깅하는 방법
13107정성태7/25/2022684Linux: 52. Debian/Ubuntu 계열의 docker container에서 자주 설치하게 되는 명령어
13106정성태7/24/2022573오류 유형: 819. 닷넷 6 프로젝트의 "Conditional compilation symbols" 기본값 오류
13105정성태7/23/2022790.NET Framework: 2034. .NET Core/5+ 환경에서 (프로젝트가 아닌) C# 코드 파일을 입력으로 컴파일하는 방법 - 두 번째 이야기 [1]
[1]  2  3  4  5  6  7  8  9  10  11  12  13  14  15  ...