Unsafe.AsRef メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
オーバーロード
| 名前 | 説明 |
|---|---|
| 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 int refToFirstElementではなく入力パラメーターがref readonly int refToFirstElementされている場合、読み取りonly 参照を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、Sec. I.12.6.2 ("Alignment") を参照してください。