共用方式為


Unsafe.AsRef 方法

定義

多載

AsRef<T>(Void*)

將 Unmanaged 指標轉換成 型 T別值的 Managed 指標。

AsRef<T>(T)

將指定的唯讀參考重新解譯為可變動的參考。

AsRef<T>(Void*)

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

重要

此 API 不符合 CLS 規範。

將 Unmanaged 指標轉換成 型 T別值的 Managed 指標。

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

類型參數

T

Managed 指標的元素類型。

參數

source
Void*

要轉換的 Unmanaged 指標。

傳回

T

T別值的Managed指標。

屬性

備註

呼叫端負責確保所產生Managed指標已針對參考的類型正確對齊。 如需對齊需求的詳細資訊,請參閱 ECMA-335, Sec. I.12.6.2 (“Alignment”) 。

適用於

AsRef<T>(T)

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

將指定的唯讀參考重新解譯為可變動的參考。

public:
generic <typename T>
 static T % AsRef(T % source);
public static ref T AsRef<T> (in T source);
public static ref T AsRef<T> (ref T source);
public static ref T AsRef<T> (scoped in T source);
public static ref T AsRef<T> (scoped ref 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方法,以接受可變動的Managed指標作為自變數。 請思考一下下列範例。

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 refToFirstElementref 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);
  }
}

適用於