語言

Unsafe.AsRef 方法

定義

多載

名稱 Description
AsRef<T>(T)

將給定的唯讀參考重新詮釋為可變的參考。

AsRef<T>(Void*)

將一個未管理指標轉換為受管理指標,並轉換為型別 T為 的值。

AsRef<T>(T)

來源:
Unsafe.cs
來源:
Unsafe.cs
來源:
Unsafe.cs
來源:
Unsafe.cs
來源:
Unsafe.cs

將給定的唯讀參考重新詮釋為可變的參考。

public:
generic <typename T>
 static T % AsRef(T % source);
public static ref T AsRef<T>(scoped ref readonly T source) where T : allows ref struct;
public static ref T AsRef<T>(in T source);
public static ref T AsRef<T>(scoped in T source);
public static ref T AsRef<T>(scoped ref readonly T source);
static member AsRef : 'T -> 'T
Public Shared Function AsRef(Of T) (ByRef source As T) As T

類型參數

T

參考的底層類型。

參數

source
T

唯讀參考,以便重新詮釋。

傳回

T

一個可變的參考,指向型別 T為 的值。

備註

此 API 在概念上與 C++ const_cast<>相似。 呼叫者有責任確保沒有資料寫入該參考位置。 執行時包含基於可讀參照確實不可變的假設的內部邏輯,違反此不變的呼叫者可能會在執行時觸發未定義的行為。

AsRef 通常用於將可讀引用傳遞到像 ,這些方法 Add接受可變的管理指標作為參數。 請考慮下列範例。

int ComputeSumOfElements(ref int refToFirstElement, nint numElements)
{
 int sum = 0;
 for (nint i = 0; i < numElements; i++)
 {
   sum += Unsafe.Add(ref refToFirstElement, i);
 }
}

若輸入參數為 ref readonly int refToFirstElement 而非 ref int refToFirstElement,前述範例將無法編譯,因為可讀參考不能作為參數。Add 相反地, AsRef 可以用來移除不可變性限制,讓編譯成功,如下範例所示。

int ComputeSumOfElements(ref readonly int refToFirstElement, nint numElements)
{
 int sum = 0;
 for (nint i = 0; i < numElements; i++)
 {
   sum += Unsafe.Add(ref Unsafe.AsRef(ref refToFirstElement), i);
 }
}

適用於

AsRef<T>(Void*)

來源:
Unsafe.cs
來源:
Unsafe.cs
來源:
Unsafe.cs
來源:
Unsafe.cs
來源:
Unsafe.cs

重要

此 API 不符合 CLS 規範。

將一個未管理指標轉換為受管理指標,並轉換為型別 T為 的值。

public:
generic <typename T>
 static T % AsRef(void* source);
[System.CLSCompliant(false)]
public static ref T AsRef<T>(void* source) where T : allows ref struct;
public static ref T AsRef<T>(void* source);
[System.CLSCompliant(false)]
public static ref T AsRef<T>(void* source);
[<System.CLSCompliant(false)>]
static member AsRef : nativeptr<unit> -> 'T
static member AsRef : nativeptr<unit> -> 'T

類型參數

T

管理指標的元素型態。

參數

source
Void*

那個未管理的轉換指標。

傳回

T

一個管理指標指向型別 T為 的值。

屬性

備註

呼叫者負責確保所產生的管理指標與所參考型別正確對齊。 欲了解更多對齊要求資訊,請參閱 ECMA-335,第I.12.6.2節(「對齊」)。

適用於