Ref<T> 및 ReadOnlyRef<T>
Ref<T>
지정된 Ref<T>
형식의 값에 대한 참조를 저장할 수 있는 스택 전용 형식입니다. 의미상 값과 동일 ref T
하며 다른 스택 전용 struct
형식의 필드 형식으로도 사용할 수 있다는 차이점이 있습니다. 현재 C#에서 지원되지 않는 적절한 ref T
필드 대신 사용할 수 있습니다.
플랫폼 API:
Ref<T>
,ReadOnlyRef<T>
작동 방식
참고 항목
다른 .NET Standard 계약 Ref<T>
에서 구현되는 방식 때문에 .NET Standard 1.4 및 .NET Standard 2.1(및 동등한 .NET Core 런타임)에 약간의 차이가 있습니다. 특히 .NET Standard 1.4에서는 관리되는 참조가 가리키는 임의의 값 대신 개체 내의 필드를 참조하는 데만 사용할 수 있습니다. .NET Standard 1.4에서 사용되는 기본 API에 형식에 대한 기본 지원이 없기 때문 Span<T>
입니다.
Ref<T>
.NET Standard 1.4
앞에서 멘션 .NET Standard 1.4 Ref<T>
에서는 지정된 object
위치 내의 위치만 가리킬 수 있습니다. 다음 코드를 생각해 봅시다.
// Be sure to include this using at the top of the file:
using Microsoft.Toolkit.HighPerformance;
// Define a sample model
class MyModel
{
public int Number = 42;
}
var model = new MyModel();
// Create a Ref<T> pointing to the MyModel.Number field
Ref<int> byRef = new Ref<T>(model, ref model.Number);
// Modify the field indirectly
byRef.Value++;
Console.WriteLine(model.Number); // Prints 43!
Warning
Ref<T>
생성자는 입력 인수의 유효성을 검사하지 않으므로 해당 개체 내의 필드에 유효한 object
참조와 참조를 전달해야 합니다. 이렇게 하지 않으면 속성이 Ref<T>.Value
잘못된 참조를 반환할 수 있습니다.
Ref<T>
.NET Standard 2.1
.NET Standard 2.1에서 Ref<T>
다음 ref T
값을 가리킬 수 있습니다.
int number = 42;
// Create a Ref<int> pointing to 'number'
Ref<int> byRef1 = new Ref<int>(ref number);
// Modify 'number'
byRef1.Value++;
Console.WriteLine(number); // Prints 43!
Warning
이 형식에는 몇 가지 주의 사항이 있으며, 인스턴스가 잘못된 참조로 만들어지면 런타임 충돌이 Ref<T>
발생할 수 있으므로 신중하게 사용해야 합니다. 특히 사용 중인 수명보다 Ref<T>
큰 값을 가리키는 인스턴스만 만들어야 Ref<T>
합니다. 다음 코드 조각을 살펴보겠습니다.
public static ref int GetDummyReference()
{
int number = 42;
Ref<int> byRef = new Ref<T>(ref number);
return ref byRef.Value;
}
이렇게 하면 컴파일되고 잘 실행되지만 반환 ref int
된 항목은 유효하지 않으며(있는 것처럼 유효한 위치를 가리키지 않음) 역참조되는 경우 충돌이 발생할 수 있습니다. 새 Ref<T>
값에서 참조되는 값의 수명을 추적하는 것은 사용자의 책임입니다.
참고 항목
참조를 래핑 null
하는 값을 만들 Ref<T>
수 있지만 식을 Ref<T>
사용하여 default(Ref<T>)
형식은 nullable 참조와 함께 사용하도록 설계되지 않았으며 내부 참조의 유효성을 검사하는 적절한 기능을 포함하지 않습니다. 설정할 null
수 있는 참조를 반환해야 하는 경우 해당 및 NullableReadOnlyRef<T>
형식을 NullableRef<T>
사용합니다.
ReadOnlyRef<T>
생성 ReadOnlyRef<T>
자가 매개 변수(읽기 전용 참조)ref T
를 사용하는 in T
것을 제외하고 미러 Ref<T>
스택 전용 형식입니다. 마찬가지로 해당 Value
속성에는 ref readonly T
ref T
.
예제
단위 테스트에서 더 많은 예제를 찾을 수 있습니다.
.NET Community Toolkit
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기