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 Tref T.

예제

단위 테스트에서 더 많은 예제를 찾을 수 있습니다.