Compartilhar via


FieldInfo.SetValue Método

Definição

Define o valor do campo do objeto fornecido para o valor especificado.

Sobrecargas

SetValue(Object, Object)

Define o valor do campo com suporte no objeto especificado.

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

Quando substituído em uma classe derivada, define o valor do campo com suporte por um determinado objeto.

SetValue(Object, Object)

Origem:
FieldInfo.cs
Origem:
FieldInfo.cs
Origem:
FieldInfo.cs

Define o valor do campo com suporte no objeto especificado.

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)

Parâmetros

obj
Object

O objeto cujo valor de campo será definido.

value
Object

O valor a ser atribuído ao campo.

Implementações

Exceções

O chamador não tem permissão para acessar esse campo.

Observação: no .NET para aplicativos da Windows Store ou na Biblioteca de Classes Portátil, capture a exceção de classe base, MemberAccessException, em vez disso.

O parâmetro obj é null e o campo é um campo de instância.

Observação: no .NET para aplicativos da Windows Store ou na Biblioteca de Classes Portátil, capture Exception em vez disso.

O campo não existe no objeto.

- ou -

O parâmetro value não pode ser convertido e armazenado no campo.

Exemplos

O exemplo a seguir define o valor de um campo, obtém e exibe o valor, modifica o campo e exibe o resultado.

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

Comentários

Esse método atribuirá value ao campo refletido por essa instância no objeto obj. Se o campo for estático, obj será ignorado. Para campos não estáticos, obj deve ser uma instância de uma classe que herda ou declara o campo. O novo valor é passado como um Object. Por exemplo, se o tipo do campo for booliano, uma instância de Object com o valor booliano apropriado será passada. Antes de definir o valor, SetValue verifica se o usuário tem permissão de acesso. Esse método final é um método de conveniência para chamar o método a seguir SetValue .

Esse método não pode ser usado para definir valores de campos estáticos, somente inicialização (readonly em C#) de forma confiável. No .NET Core 3.0 e versões posteriores, uma exceção será gerada se você tentar definir um valor em um campo estático somente inicialização.

Observação

O código totalmente confiável tem as permissões necessárias para acessar e invocar construtores privados, métodos, campos e propriedades usando reflexão.

Observação

A partir do .NET Framework 2.0 Service Pack 1, esse método poderá ser usado para acessar membros não públicos se o chamador tiver sido concedido ReflectionPermission com o ReflectionPermissionFlag.RestrictedMemberAccess sinalizador e se o conjunto de concessões dos membros não públicos estiver restrito ao conjunto de concessões do chamador ou a um subconjunto dele. (Consulte Considerações de segurança para reflexão.)

Para usar essa funcionalidade, seu aplicativo deve ter como destino o .NET Framework 3.5 ou posterior.

Aplica-se a

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

Origem:
FieldInfo.cs
Origem:
FieldInfo.cs
Origem:
FieldInfo.cs

Quando substituído em uma classe derivada, define o valor do campo com suporte por um determinado objeto.

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)

Parâmetros

obj
Object

O objeto cujo valor de campo será definido.

value
Object

O valor a ser atribuído ao campo.

invokeAttr
BindingFlags

Um campo de Binder que especifica o tipo de associação desejado (por exemplo, Binder.CreateInstance ou Binder.ExactBinding).

binder
Binder

Um conjunto de propriedades que habilita a associação, coerção de tipos de argumento e invocação de membros usando a reflexão. Se binder for null, Binder.DefaultBinding será usado.

culture
CultureInfo

As preferências de software de uma determinada cultura.

Implementações

Exceções

O chamador não tem permissão para acessar esse campo.

O parâmetro obj é null e o campo é um campo de instância.

O campo não existe no objeto.

- ou -

O parâmetro value não pode ser convertido e armazenado no campo.

Comentários

Esse método atribuirá value ao campo refletido por essa instância em obj. Se o campo for estático, obj será ignorado. Para campos não estáticos, obj deve ser uma instância de uma classe que herda ou declara o campo. O novo valor é passado como um Object. Por exemplo, se o tipo do campo for Boolean, uma instância de Object com o valor booliano apropriado será passada. Antes de definir o valor, SetValue verifica se o usuário tem permissão de acesso.

Esse método não pode ser usado para definir valores de campos estáticos, somente inicialização (readonly em C#) de forma confiável. No .NET Core 3.0 e versões posteriores, uma exceção será gerada se você tentar definir um valor em um campo estático somente inicialização.

Observação

O código totalmente confiável tem as permissões necessárias para acessar e invocar construtores privados, métodos, campos e propriedades usando reflexão.

Observação

A partir do .NET Framework 2.0 Service Pack 1, esse método poderá ser usado para acessar membros não públicos se o chamador tiver sido concedido ReflectionPermission com o ReflectionPermissionFlag.RestrictedMemberAccess sinalizador e se o conjunto de concessões dos membros não públicos estiver restrito ao conjunto de concessões do chamador ou a um subconjunto dele. (Consulte Considerações de segurança para reflexão.)

Para usar essa funcionalidade, seu aplicativo deve ter como destino o .NET Framework 3.5 ou posterior.

Aplica-se a