FieldInfo.GetValue(Object) Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Gibt den Wert eines Felds zurück, das durch ein angegebenes Objekt unterstützt wird, wenn es in einer abgeleiteten Klasse überschrieben wird.
public:
abstract System::Object ^ GetValue(System::Object ^ obj);
public abstract object GetValue (object obj);
public abstract object? GetValue (object? obj);
abstract member GetValue : obj -> obj
Public MustOverride Function GetValue (obj As Object) As Object
Parameter
- obj
- Object
Das Objekt, dessen Feldwert zurückgegeben wird.
Gibt zurück
Ein Objekt mit dem Wert des Felds, das von dieser Instanz reflektiert wird.
Implementiert
Ausnahmen
Das Feld ist nicht statisch, und obj
ist null
.
Hinweis: In .NET für Windows Store-Apps oder der portablen Klassenbibliothek sollten Sie stattdessen abfangen Exception .
Ein Feld ist als literal markiert, aber das Feld weist keine der akzeptierten literalen Typen auf.
Der Aufrufer hat nicht die Berechtigung für den Zugriff auf dieses Feld.
Hinweis: Erfassen Sie in .NET für Windows Store-Apps oder der portablen Klassenbibliothek stattdessen die Basisklassen-Ausnahme MemberAccessException.
Die Methode ist weder deklariert noch von der Klasse von obj
geerbt worden.
Beispiele
Im folgenden Beispiel wird die GetValue -Methode verwendet, um den Wert eines statischen Felds abzurufen. Beachten Sie, dass der Wert des obj
Arguments ist null
.
using namespace System;
using namespace System::Reflection;
ref class Example
{
public:
static String^ val = "test";
};
int main()
{
FieldInfo^ fld = Example::typeid->GetField( "val" );
Console::WriteLine(fld->GetValue(nullptr) );
Example::val = "hi";
Console::WriteLine(fld->GetValue(nullptr) );
}
// The example displays the following output:
// test
// hi
using System;
using System.Reflection;
class Example
{
public static String val = "test";
public static void Main()
{
FieldInfo fld = typeof(Example).GetField("val");
Console.WriteLine(fld.GetValue(null));
val = "hi";
Console.WriteLine(fld.GetValue(null));
}
}
// The example displays the following output:
// test
// hi
Imports System.Reflection
Class Example
Public Shared val As String = "test"
Public Shared Sub Main()
Dim fld As FieldInfo = GetType(Example).GetField("val")
Console.WriteLine(fld.GetValue(Nothing))
val = "hi"
Console.WriteLine(fld.GetValue(Nothing))
End Sub
End Class
' The example displays the following output:
' test
' hi
Das folgende Beispiel ruft ein Array von FieldInfo -Objekten ab, das die Felder des FieldsClass
Typs darstellt, und ruft dann auf GetValue , um den Wert jedes Felds für das fieldsInst
-Objekt anzuzeigen.
using namespace System;
using namespace System::Reflection;
public ref class FieldsClass
{
public:
String^ fieldA;
String^ fieldB;
FieldsClass()
{
fieldA = "A public field";
fieldB = "Another public field";
}
};
int main()
{
FieldsClass^ fieldsInst = gcnew FieldsClass;
// Get the type of FieldsClass.
Type^ fieldsType = FieldsClass::typeid;
// Get the FieldInfo of FieldsClass.
array<FieldInfo^>^ fields = fieldsType->GetFields(static_cast<BindingFlags>(BindingFlags::Public | BindingFlags::Instance));
// Display the values of the fields.
Console::WriteLine("Displaying the values of the fields of {0}:", fieldsType);
for (int i = 0; i < fields->Length; i++)
{
Console::WriteLine(" {0}:\t'{1}'",
fields[i]->Name, fields[i]->GetValue(fieldsInst));
}
}
// The example displays the following output:
// Displaying the values of the fields of FieldsClass:
// fieldA: 'A public field'
// fieldB: 'Another public field'
using System;
using System.Reflection;
public class FieldsClass
{
public string fieldA;
public string fieldB;
public FieldsClass()
{
fieldA = "A public field";
fieldB = "Another public field";
}
}
public class Example
{
public static void Main()
{
FieldsClass fieldsInst = new FieldsClass();
// Get the type of FieldsClass.
Type fieldsType = typeof(FieldsClass);
// Get an array of FieldInfo objects.
FieldInfo[] fields = fieldsType.GetFields(BindingFlags.Public
| BindingFlags.Instance);
// Display the values of the fields.
Console.WriteLine("Displaying the values of the fields of {0}:",
fieldsType);
for(int i = 0; i < fields.Length; i++)
{
Console.WriteLine(" {0}:\t'{1}'",
fields[i].Name, fields[i].GetValue(fieldsInst));
}
}
}
// The example displays the following output:
// Displaying the values of the fields of FieldsClass:
// fieldA: 'A public field'
// fieldB: 'Another public field'
Imports System.Reflection
Public Class FieldsClass
Public fieldA As String
Public fieldB As String
Public Sub New()
fieldA = "A public field"
fieldB = "Another public field"
End Sub
End Class
Public Module Example
Public Sub Main()
Dim fieldsInst As New FieldsClass()
' Get the type of FieldsClass.
Dim fieldsType As Type = GetType(FieldsClass)
' Get an array of FieldInfo objects.
Dim fields As FieldInfo() = fieldsType.GetFields(BindingFlags.Public Or BindingFlags.Instance)
' Display the values of the fields.
Console.WriteLine("Displaying the values of the fields of {0}:", fieldsType)
For i As Integer = 0 To fields.Length - 1
Console.WriteLine(" {0}:{2}'{1}'",
fields(i).Name, fields(i).GetValue(fieldsInst), vbTab)
Next
End Sub
End Module
' The example displays the following output:
' Displaying the values of the fields of FieldsClass:
' fieldA: 'A public field'
' fieldB: 'Another public field'
Hinweise
Wenn das Feld statisch ist, obj
wird ignoriert. Bei nicht statischen Feldern sollte es sich um eine Instanz einer Klasse handeln, obj
die das Feld erbt oder deklariert. Beachten Sie, dass der Rückgabetyp von GetValue
ist Object
. Wenn das Feld beispielsweise einen booleschen Grundwert enthält, wird eine Instanz von Object
mit dem entsprechenden booleschen Wert zurückgegeben. Vor der Rückgabe des Werts wird überprüft, GetValue
ob der Benutzer über Zugriffsberechtigungen verfügt.
Hinweis
Zugriffseinschränkungen werden für vollständig vertrauenswürdigen Code ignoriert. Das heißt, private Konstruktoren, Methoden, Felder und Eigenschaften können über Reflektion aufgerufen und aufgerufen werden, wenn der Code vollständig vertrauenswürdig ist.
Hinweis
Ab .NET Framework 2.0 Service Pack 1 kann diese Methode für den Zugriff auf nicht öffentliche Member verwendet werden, wenn dem Aufrufer das ReflectionPermissionFlag.RestrictedMemberAccess Flag gewährt ReflectionPermission wurde und wenn der Grant-Satz der nicht öffentlichen Member auf den Grant-Satz des Aufrufers oder eine Teilmenge davon beschränkt ist. (Weitere Informationen finden Sie unter Sicherheitsüberlegungen.)
Um diese Funktionalität zu verwenden, sollte Ihre Anwendung auf .NET Framework 3.5 oder höher ausgerichtet sein.