Sdílet prostřednictvím


FieldInfo.SetValue Metoda

Definice

Nastaví hodnotu pole pro daný objekt na danou hodnotu.

Přetížení

SetValue(Object, Object)

Nastaví hodnotu pole podporovaného daným objektem.

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

Při přepsání v odvozené třídě nastaví hodnotu pole podporovaného daným objektem.

SetValue(Object, Object)

Zdroj:
FieldInfo.cs
Zdroj:
FieldInfo.cs
Zdroj:
FieldInfo.cs

Nastaví hodnotu pole podporovaného daným objektem.

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

Objekt, jehož hodnota pole bude nastavena.

value
Object

Hodnota, která se má přiřadit k poli.

Implementuje

Výjimky

Volající nemá oprávnění pro přístup k tomuto poli.

Poznámka: V .NET pro aplikace pro Windows Store nebo v přenosné knihovně tříd místo toho zachyťte výjimku MemberAccessExceptionzákladní třídy.

Parametr obj je null a pole je pole instance.

Poznámka: V .NET pro aplikace pro Windows Store nebo v přenosné knihovně tříd místo toho zachyťte Exception .

Pole v objektu neexistuje.

-nebo-

Parametr value nelze převést a uložit do pole.

Příklady

Následující příklad nastaví hodnotu pole, získá a zobrazí hodnotu, upraví pole a zobrazí výsledek.

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

Poznámky

Tato metoda přiřadí value pole, které tato instance odráží na objektu obj. Pokud je pole statické, obj bude ignorováno. Pro nestatické pole by měla být instance třídy, obj která zdědí nebo deklaruje pole. Nová hodnota se předá jako Object. Pokud je například typ pole Logický, předá se instance Object s příslušnou logickou hodnotou. Před nastavením hodnoty zkontroluje, SetValue jestli má uživatel oprávnění k přístupu. Tato poslední metoda je pohodlnou metodou pro volání následující SetValue metody.

Tuto metodu nelze použít k spolehlivému nastavení hodnot statických polí pouze init (readonly v jazyce C#). V .NET Core 3.0 a novějších verzích dojde k výjimce, pokud se pokusíte nastavit hodnotu ve statickém inicializačním poli.

Poznámka

Plně důvěryhodný kód má oprávnění potřebná k přístupu k privátním konstruktorům, metodám, polím a vlastnostem a jejich vyvolání pomocí reflexe.

Poznámka

Počínaje .NET Framework 2.0 Service Pack 1 lze tuto metodu použít pro přístup k neveřejným členům, pokud byl volajícímu udělen ReflectionPermissionReflectionPermissionFlag.RestrictedMemberAccess příznak a pokud je sada udělení neveřejných členů omezena na sadu grantů volajícího nebo její podmnožinu. (Viz Aspekty zabezpečení pro reflexi.)

Pokud chcete tuto funkci používat, měla by vaše aplikace cílit na rozhraní .NET Framework 3.5 nebo novější.

Platí pro

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

Zdroj:
FieldInfo.cs
Zdroj:
FieldInfo.cs
Zdroj:
FieldInfo.cs

Při přepsání v odvozené třídě nastaví hodnotu pole podporovaného daným objektem.

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

Objekt, jehož hodnota pole bude nastavena.

value
Object

Hodnota, která se má přiřadit k poli.

invokeAttr
BindingFlags

Pole Binder , které určuje požadovaný typ vazby (například Binder.CreateInstance nebo Binder.ExactBinding).

binder
Binder

Sada vlastností, která umožňuje vazbu, vynucování typů argumentů a vyvolání členů prostřednictvím reflexe. Pokud binder je null, použije se Binder.DefaultBinding .

culture
CultureInfo

Předvolby softwaru pro konkrétní jazykovou verzi.

Implementuje

Výjimky

Volající nemá oprávnění pro přístup k tomuto poli.

Parametr obj je null a pole je pole instance.

Pole v objektu neexistuje.

-nebo-

Parametr value nelze převést a uložit do pole.

Poznámky

Tato metoda přiřadí value pole, které tato instance odráží na obj. Pokud je pole statické, obj bude ignorováno. Pro nestatické pole by měla být instance třídy, obj která zdědí nebo deklaruje pole. Nová hodnota se předá jako Object. Pokud je Booleannapříklad typ pole , předá se instance Object s příslušnou logickou hodnotou. Před nastavením hodnoty zkontroluje, SetValue jestli má uživatel oprávnění k přístupu.

Tuto metodu nelze použít k spolehlivému nastavení hodnot statických polí pouze init (readonly v jazyce C#). V .NET Core 3.0 a novějších verzích dojde k výjimce, pokud se pokusíte nastavit hodnotu ve statickém inicializačním poli.

Poznámka

Plně důvěryhodný kód má oprávnění potřebná k přístupu k privátním konstruktorům, metodám, polím a vlastnostem a jejich vyvolání pomocí reflexe.

Poznámka

Počínaje .NET Framework 2.0 Service Pack 1 lze tuto metodu použít pro přístup k neveřejným členům, pokud byl volajícímu udělen ReflectionPermissionReflectionPermissionFlag.RestrictedMemberAccess příznak a pokud je sada udělení neveřejných členů omezena na sadu grantů volajícího nebo její podmnožinu. (Viz Aspekty zabezpečení pro reflexi.)

Pokud chcete tuto funkci používat, měla by vaše aplikace cílit na rozhraní .NET Framework 3.5 nebo novější.

Platí pro