Udostępnij za pośrednictwem


FieldInfo.SetValue Metoda

Definicja

Ustawia wartość pola dla danego obiektu na daną wartość.

Przeciążenia

SetValue(Object, Object)

Ustawia wartość pola obsługiwanego przez dany obiekt.

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

Po zastąpieniu w klasie pochodnej ustawia wartość pola obsługiwanego przez dany obiekt.

SetValue(Object, Object)

Źródło:
FieldInfo.cs
Źródło:
FieldInfo.cs
Źródło:
FieldInfo.cs

Ustawia wartość pola obsługiwanego przez dany obiekt.

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)

Parametry

obj
Object

Obiekt, którego wartość pola zostanie ustawiona.

value
Object

Wartość do przypisania do pola.

Implementuje

Wyjątki

Obiekt wywołujący nie ma uprawnień dostępu do tego pola.

Uwaga: na platformie .NET dla aplikacji ze Sklepu Windows lub przenośnej biblioteki klas przechwyć wyjątek klasy bazowej , MemberAccessExceptionzamiast tego.

Parametr obj jest null i pole jest polem wystąpienia.

Uwaga: w programie .NET dla aplikacji ze Sklepu Windows lub w przenośnej bibliotece klas przechwyć Exception zamiast tego.

Pole nie istnieje w obiekcie.

-lub-

Nie value można przekonwertować i zapisać parametru w polu.

Przykłady

Poniższy przykład ustawia wartość pola, pobiera i wyświetla wartość, modyfikuje pole i wyświetla wynik.

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".

Uwagi

Ta metoda spowoduje przypisanie value do pola odzwierciedlonego przez to wystąpienie w obiekcie obj. Jeśli pole jest statyczne, obj zostanie zignorowane. W przypadku pól obj niestatycznych należy być wystąpieniem klasy, która dziedziczy lub deklaruje pole. Nowa wartość jest przekazywana jako Object. Jeśli na przykład typ pola jest wartością logiczną, zostanie przekazane wystąpienie Object z odpowiednią wartością logiczną. Przed ustawieniem wartości sprawdza, SetValue czy użytkownik ma uprawnienia dostępu. Ta ostateczna metoda jest wygodną metodą wywoływania następującej SetValue metody.

Tej metody nie można użyć do niezawodnego ustawiania wartości pól statycznych, tylko do inicjowania (readonly w języku C#). W wersjach .NET Core 3.0 i nowszych wyjątek jest zgłaszany, jeśli próbujesz ustawić wartość w polu statycznym, tylko do inicjowania.

Uwaga

W pełni zaufany kod ma uprawnienia potrzebne do uzyskiwania dostępu do prywatnych konstruktorów, metod, pól i właściwości przy użyciu odbicia i wywoływania ich.

Uwaga

Począwszy od programu .NET Framework 2.0 z dodatkiem Service Pack 1, ta metoda może służyć do uzyskiwania dostępu do elementów członkowskich innych niż publiczne, jeśli obiekt wywołujący otrzymał ReflectionPermissionReflectionPermissionFlag.RestrictedMemberAccess flagę, a zestaw dotacji niepublizowanych członków jest ograniczony do zestawu dotacji osoby wywołującej lub jej podzbioru. (Zobacz Zagadnienia dotyczące zabezpieczeń do odbicia).

Aby korzystać z tej funkcji, aplikacja powinna być docelowa dla programu .NET Framework 3.5 lub nowszego.

Dotyczy

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

Źródło:
FieldInfo.cs
Źródło:
FieldInfo.cs
Źródło:
FieldInfo.cs

Po zastąpieniu w klasie pochodnej ustawia wartość pola obsługiwanego przez dany obiekt.

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)

Parametry

obj
Object

Obiekt, którego wartość pola zostanie ustawiona.

value
Object

Wartość do przypisania do pola.

invokeAttr
BindingFlags

Pole, Binder które określa typ powiązania, który jest żądany (na przykład Binder.CreateInstance lub Binder.ExactBinding).

binder
Binder

Zestaw właściwości, który umożliwia powiązanie, wymuszanie typów argumentów i wywołanie elementów członkowskich przez odbicie. Jeśli binder jest to null, Binder.DefaultBinding jest używany.

culture
CultureInfo

Preferencje dotyczące oprogramowania określonej kultury.

Implementuje

Wyjątki

Obiekt wywołujący nie ma uprawnień dostępu do tego pola.

Parametr obj jest null i pole jest polem wystąpienia.

Pole nie istnieje w obiekcie.

-lub-

Nie value można przekonwertować i zapisać parametru w polu.

Uwagi

Ta metoda spowoduje przypisanie value do pola odzwierciedlonego przez to wystąpienie w pliku obj. Jeśli pole jest statyczne, obj zostanie zignorowane. W przypadku pól obj niestatycznych należy być wystąpieniem klasy, która dziedziczy lub deklaruje pole. Nowa wartość jest przekazywana jako Object. Jeśli na przykład typ pola to Boolean, zostanie przekazane wystąpienie Object z odpowiednią wartością logiczną. Przed ustawieniem wartości sprawdza, SetValue czy użytkownik ma uprawnienia dostępu.

Tej metody nie można użyć do niezawodnego ustawiania wartości pól statycznych, tylko do inicjowania (readonly w języku C#). W wersjach .NET Core 3.0 i nowszych wyjątek jest zgłaszany, jeśli próbujesz ustawić wartość w polu statycznym, tylko do inicjowania.

Uwaga

W pełni zaufany kod ma uprawnienia potrzebne do uzyskiwania dostępu do prywatnych konstruktorów, metod, pól i właściwości przy użyciu odbicia i wywoływania ich.

Uwaga

Począwszy od programu .NET Framework 2.0 z dodatkiem Service Pack 1, ta metoda może służyć do uzyskiwania dostępu do elementów członkowskich innych niż publiczne, jeśli obiekt wywołujący otrzymał ReflectionPermissionReflectionPermissionFlag.RestrictedMemberAccess flagę, a zestaw dotacji niepublizowanych członków jest ograniczony do zestawu dotacji osoby wywołującej lub jej podzbioru. (Zobacz Zagadnienia dotyczące zabezpieczeń do odbicia).

Aby korzystać z tej funkcji, aplikacja powinna być docelowa dla programu .NET Framework 3.5 lub nowszego.

Dotyczy