Unsafe.AsRef メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
オーバーロード
AsRef<T>(Void*) |
アンマネージ ポインターを 型の値にマネージド ポインターに変換します |
AsRef<T>(T) |
指定された読み取り専用参照を変更可能な参照として再解釈します。 |
AsRef<T>(Void*)
- ソース:
- Unsafe.cs
- ソース:
- Unsafe.cs
- ソース:
- Unsafe.cs
重要
この API は CLS 準拠ではありません。
アンマネージ ポインターを 型の値にマネージド ポインターに変換します T
。
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
マネージド ポインターの要素型。
パラメーター
- source
- Void*
変換するアンマネージ ポインター。
戻り値
型 T
の値へのマネージド ポインター。
- 属性
注釈
呼び出し元は、結果のマネージド ポインターが参照先の型に対して適切に配置されるようにする必要があります。 アラインメント要件の詳細については、「 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> (scoped in T source);
public static ref T AsRef<T> (scoped ref T source);
public static ref T AsRef<T> (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メソッドに読み取り専用参照を渡す場合に使用されます。 例を次に示します。
int ComputeSumOfElements(ref int refToFirstElement, nint numElements)
{
int sum = 0;
for (nint i = 0; i < numElements; i++)
{
sum += Unsafe.Add(ref refToFirstElement, i);
}
}
入力パラメーターが のref int refToFirstElement
代わりに のref readonly 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);
}
}
適用対象
.NET