Unsafe.AsRef 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
多載
AsRef<T>(Void*) |
將 Unmanaged 指標轉換成 型 |
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
別值的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
別 值的可變動參考。
備註
此 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 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);
}
}