Freigeben über


FieldInfo.SetValue Methode

Definition

Legt den Wert des Felds für das angegebene Objekt auf den angegebenen Wert fest.

Überlädt

SetValue(Object, Object)

Legt den Wert des Felds fest, das durch das angegebene Objekt unterstützt wird.

SetValue(Object, Object, BindingFlags, Binder, CultureInfo)

Legt den Wert eines Felds fest, das durch ein angegebenes Objekt unterstützt wird, wenn es in einer abgeleiteten Klasse überschrieben wird.

SetValue(Object, Object)

Quelle:
FieldInfo.cs
Quelle:
FieldInfo.cs
Quelle:
FieldInfo.cs

Legt den Wert des Felds fest, das durch das angegebene Objekt unterstützt wird.

public:
 virtual void SetValue(System::Object ^ obj, System::Object ^ value);
public:
 void SetValue(System::Object ^ obj, System::Object ^ value);
public virtual void SetValue (object obj, object value);
public void SetValue (object? obj, object? value);
public void SetValue (object obj, object value);
abstract member SetValue : obj * obj -> unit
override this.SetValue : obj * obj -> unit
member this.SetValue : obj * obj -> unit
Public Overridable Sub SetValue (obj As Object, value As Object)
Public Sub SetValue (obj As Object, value As Object)

Parameter

obj
Object

Das Objekt, dessen Feldwert festgelegt wird.

value
Object

Der Wert, der dem Feld zugewiesen werden soll.

Implementiert

Ausnahmen

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.

Der obj-Parameter ist null, und das Feld ist ein Instanzfeld.

Hinweis: In .NET für Windows Store-Apps oder der portablen Klassenbibliothek sollten Sie stattdessen abfangen Exception .

Das Feld ist im Objekt nicht vorhanden.

- oder -

Der value-Parameter kann nicht konvertiert und im Feld gespeichert werden.

Beispiele

Im folgenden Beispiel wird der Wert eines Felds festgelegt, der Wert abgerufen und angezeigt, das Feld geändert und das Ergebnis angezeigt.

using namespace System;
using namespace System::Reflection;
using namespace System::Globalization;

public ref class Example
{
private:
   String^ myString;

public:
   Example()
   {
      myString = "Old value";
   }

   property String^ StringProperty 
   {
      String^ get()
      {
         return myString;
      }
   }
};

int main()
{
    Example^ myObject = gcnew Example;
    Type^ myType = Example::typeid;
    FieldInfo^ myFieldInfo = myType->GetField( "myString", 
        BindingFlags::NonPublic | BindingFlags::Instance);
      
    // Display the string before applying SetValue to the field.
    Console::WriteLine( "\nThe field value of myString is \"{0}\".", 
        myFieldInfo->GetValue( myObject ) );
    // Display the SetValue signature used to set the value of a field.
    Console::WriteLine( "Applying SetValue(Object, Object)." );

    // Change the field value using the SetValue method. 
    myFieldInfo->SetValue( myObject, "New value" );     
    // Display the string after applying SetValue to the field.
    Console::WriteLine( "The field value of mystring is \"{0}\".", 
        myFieldInfo->GetValue(myObject));
}
/* This code produces the following output:

The field value of myString is "Old value".
Applying SetValue(Object, Object).
The field value of mystring is "New value".
 */
using System;
using System.Reflection;
using System.Globalization;

public class Example
{
    private string myString;
    public Example()
    {
        myString = "Old value";
    }

    public string StringProperty
    {
        get
        {
            return myString;
        }
    }
}

public class FieldInfo_SetValue
{
    public static void Main()
    {
        Example myObject = new Example();
        Type myType = typeof(Example);
        FieldInfo myFieldInfo = myType.GetField("myString",
            BindingFlags.NonPublic | BindingFlags.Instance);

        // Display the string before applying SetValue to the field.
        Console.WriteLine( "\nThe field value of myString is \"{0}\".",
        myFieldInfo.GetValue(myObject));
        // Display the SetValue signature used to set the value of a field.
        Console.WriteLine( "Applying SetValue(Object, Object).");

        // Change the field value using the SetValue method.
        myFieldInfo.SetValue(myObject, "New value");
        // Display the string after applying SetValue to the field.
        Console.WriteLine( "The field value of mystring is \"{0}\".",
            myFieldInfo.GetValue(myObject));
    }
}

/* This code example produces the following output:

The field value of myString is "Old value".
Applying SetValue(Object, Object).
The field value of mystring is "New value".
 */
Imports System.Reflection
Imports System.Globalization

Public Class Example
   Private myString As String
   
   Public Sub New()
      myString = "Old value"
   End Sub 
   
   ReadOnly Property StringProperty() As String
      Get
         Return myString
      End Get
   End Property
End Class 


Public Module FieldInfo_SetValue
   
   Sub Main()

        Dim myObject As New Example()
        Dim myType As Type = GetType(Example)
        Dim myFieldInfo As FieldInfo = myType.GetField("myString", _
           BindingFlags.NonPublic Or BindingFlags.Instance)

        ' Display the string before applying SetValue to the field.
        Console.WriteLine(vbCrLf & "The field value of myString is ""{0}"".", _
            myFieldInfo.GetValue(myObject))
        ' Display the SetValue signature used to set the value of a field.
        Console.WriteLine("Applying SetValue(Object, Object).")

        ' Change the field value using the SetValue method. 
        myFieldInfo.SetValue(myObject, "New value")
        ' Display the string after applying SetValue to the field.
        Console.WriteLine("The field value of mystring is ""{0}"".", _
            myFieldInfo.GetValue(myObject))

    End Sub 
End Module

' This code example produces the following output:
' The field value of myString is "Old value".
' Applying SetValue(Object, Object).
' The field value of mystring is "New value".

Hinweise

Diese Methode weist das Feld zu, value das von dieser Instanz im -Objekt objwiderspiegelt wird. 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. Der neue Wert wird als Objectübergeben. Wenn der Feldtyp beispielsweise boolesch ist, wird eine Instanz von Object mit dem entsprechenden booleschen Wert übergeben. Vor dem Festlegen des Werts wird überprüft, SetValue ob der Benutzer über Zugriffsberechtigungen verfügt. Diese letzte Methode ist eine Praktische Methode zum Aufrufen der folgenden SetValue Methode.

Diese Methode kann nicht verwendet werden, um Werte von statischen init-only (readonly in C#) Feldern zuverlässig festzulegen. In .NET Core 3.0 und höheren Versionen wird eine Ausnahme ausgelöst, wenn Sie versuchen, einen Wert für ein statisches, reines Init-Feld festzulegen.

Hinweis

Vollständig vertrauenswürdiger Code verfügt über die Berechtigungen, die erforderlich sind, um auf private Konstruktoren, Methoden, Felder und Eigenschaften mithilfe von Reflektion zuzugreifen und diese aufzurufen.

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.

Gilt für:

SetValue(Object, Object, BindingFlags, Binder, CultureInfo)

Quelle:
FieldInfo.cs
Quelle:
FieldInfo.cs
Quelle:
FieldInfo.cs

Legt den Wert eines Felds fest, das durch ein angegebenes Objekt unterstützt wird, wenn es in einer abgeleiteten Klasse überschrieben wird.

public:
 abstract void SetValue(System::Object ^ obj, System::Object ^ value, System::Reflection::BindingFlags invokeAttr, System::Reflection::Binder ^ binder, System::Globalization::CultureInfo ^ culture);
public abstract void SetValue (object? obj, object? value, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder? binder, System.Globalization.CultureInfo? culture);
public abstract void SetValue (object obj, object value, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, System.Globalization.CultureInfo culture);
abstract member SetValue : obj * obj * System.Reflection.BindingFlags * System.Reflection.Binder * System.Globalization.CultureInfo -> unit
Public MustOverride Sub SetValue (obj As Object, value As Object, invokeAttr As BindingFlags, binder As Binder, culture As CultureInfo)

Parameter

obj
Object

Das Objekt, dessen Feldwert festgelegt wird.

value
Object

Der Wert, der dem Feld zugewiesen werden soll.

invokeAttr
BindingFlags

Ein Feld von Binder, das die Art der gewünschten Bindung angibt, z. B. Binder.CreateInstance oder Binder.ExactBinding.

binder
Binder

Eine Gruppe von Eigenschaften, die die Bindung, Umwandlung der Argumenttypen und das Aufrufen von Membern über Reflektion ermöglicht. Wenn binder den Wert null hat, wird Binder.DefaultBinding verwendet.

culture
CultureInfo

Die Softwareeinstellungen für eine bestimmte Kultur.

Implementiert

Ausnahmen

Der Aufrufer hat nicht die Berechtigung für den Zugriff auf dieses Feld.

Der obj-Parameter ist null, und das Feld ist ein Instanzfeld.

Das Feld ist im Objekt nicht vorhanden.

- oder -

Der value-Parameter kann nicht konvertiert und im Feld gespeichert werden.

Hinweise

Diese Methode weist das Feld zu, value das von dieser Instanz in objwiderspiegelt wird. 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. Der neue Wert wird als Objectübergeben. Wenn der Feldtyp beispielsweise ist, wird Booleaneine Instanz von Object mit dem entsprechenden booleschen Wert übergeben. Vor dem Festlegen des Werts wird überprüft, SetValue ob der Benutzer über Zugriffsberechtigungen verfügt.

Diese Methode kann nicht verwendet werden, um Werte von statischen init-only (readonly in C#) Feldern zuverlässig festzulegen. In .NET Core 3.0 und höheren Versionen wird eine Ausnahme ausgelöst, wenn Sie versuchen, einen Wert für ein statisches, reines Init-Feld festzulegen.

Hinweis

Vollständig vertrauenswürdiger Code verfügt über die Berechtigungen, die erforderlich sind, um auf private Konstruktoren, Methoden, Felder und Eigenschaften mithilfe von Reflektion zuzugreifen und diese aufzurufen.

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.

Gilt für: