Unsafe.AsRef Metod

Definition

Överlagringar

Name Description
AsRef<T>(T)

Omtolkar den angivna skrivskyddade referensen som en föränderlig referens.

AsRef<T>(Void*)

Konverterar en ohanterad pekare till en hanterad pekare till ett värde av typen T.

AsRef<T>(T)

Källa:
Unsafe.cs
Källa:
Unsafe.cs
Källa:
Unsafe.cs
Källa:
Unsafe.cs
Källa:
Unsafe.cs

Omtolkar den angivna skrivskyddade referensen som en föränderlig referens.

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

Typparametrar

T

Referensens underliggande typ.

Parametrar

source
T

Den skrivskyddade referensen för omtolkning.

Returer

T

En föränderlig referens till ett värde av typen T.

Kommentarer

Det här API:et liknar konceptuellt C++:s const_cast<>. Det är anroparens ansvar att se till att inga data skrivs till den refererade platsen. Körningen innehåller intern logik som bygger på antagandet att readonly-referenser verkligen är oföränderliga, och anropare som bryter mot den här invarianten kan utlösa odefinierat beteende inom körningen.

AsRef används vanligtvis för att skicka en skrivskyddad referens till metoder som Add, som accepterar föränderliga hanterade pekare som argument. Tänk dig följande exempel.

int ComputeSumOfElements(ref int refToFirstElement, nint numElements)
{
 int sum = 0;
 for (nint i = 0; i < numElements; i++)
 {
   sum += Unsafe.Add(ref refToFirstElement, i);
 }
}

Om indataparametern är ref readonly int refToFirstElement i stället för ref int refToFirstElementkompileras inte föregående exempel eftersom skrivskyddade referenser inte kan användas som argument till Add. AsRef Kan i stället användas för att ta bort begränsningen för oföränderlighet och tillåta att kompilering lyckas, som du ser i följande exempel.

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

Gäller för

AsRef<T>(Void*)

Källa:
Unsafe.cs
Källa:
Unsafe.cs
Källa:
Unsafe.cs
Källa:
Unsafe.cs
Källa:
Unsafe.cs

Viktigt!

Detta API uppfyller inte CLS.

Konverterar en ohanterad pekare till en hanterad pekare till ett värde av typen 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

Typparametrar

T

Den hanterade pekarens elementtyp.

Parametrar

source
Void*

Den ohanterade pekaren som ska konverteras.

Returer

T

En hanterad pekare till ett värde av typen T.

Attribut

Kommentarer

Anroparen ansvarar för att säkerställa att den resulterande hanterade pekaren är korrekt justerad för den refererade typen. Mer information om justeringskrav finns i ECMA-335, sek. I.12.6.2 ("Justering").

Gäller för