次の方法で共有


Unsafe.AsRef メソッド

定義

オーバーロード

AsRef<T>(Void*)

アンマネージ ポインターを 型の値にマネージド ポインターに変換します T

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

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

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

適用対象