Unsafe.AsRef 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
多載
| 名稱 | Description |
|---|---|
| AsRef<T>(T) |
將給定的唯讀參考重新詮釋為可變的參考。 |
| AsRef<T>(Void*) |
將一個未管理指標轉換為受管理指標,並轉換為型別 |
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為 的值。
備註
此 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為 的值。
- 屬性
備註
呼叫者負責確保所產生的管理指標與所參考型別正確對齊。 欲了解更多對齊要求資訊,請參閱 ECMA-335,第I.12.6.2節(「對齊」)。