FieldInfo.SetValue Método

Definición

Establece el valor del campo para el objeto especificado en el valor indicado.

Sobrecargas

SetValue(Object, Object)

Establece el valor del campo admitido por el objeto determinado.

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

Cuando se reemplaza en una clase derivada, se establece el valor del campo compatible con el objeto dado.

SetValue(Object, Object)

Establece el valor del campo admitido por el objeto determinado.

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

Objeto cuyo valor de campo se va a establecer.

value
Object

Valor que se va a asignar al campo.

Implementaciones

Excepciones

El autor de la llamada no tiene permiso para acceder a este campo.

Nota: En .NET para aplicaciones de la Tienda Windows o la Biblioteca de clases portable, detecte la excepción de clase base, MemberAccessException, en su lugar.

El parámetro obj es null y el campo es un campo de instancia.

Nota: En .NET para aplicaciones de la Tienda Windows o la biblioteca de clases portable, detecte Exception en su lugar.

Este campo no existe en el objeto.

o bien

El parámetro value no puede convertirse y almacenarse en el campo.

Ejemplos

En el ejemplo siguiente se establece el valor de un campo, se obtiene y se muestra el valor, se modifica el campo y se muestra el 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".

Comentarios

Este método se asignará value al campo reflejado por esta instancia en el objeto obj. Si el campo es estático, obj se omitirá. En el caso de los campos no estáticos, obj debe ser una instancia de una clase que herede o declare el campo. El nuevo valor se pasa como .Object Por ejemplo, si el tipo del campo es Boolean, se pasa una instancia de Object con el valor booleano adecuado. Antes de establecer el valor, SetValue comprueba si el usuario tiene permiso de acceso. Este método final es un método de conveniencia para llamar al método siguiente SetValue .

Este método no se puede usar para establecer valores de campos estáticos de solo inicialización (readonly en C#) de forma confiable. En .NET Core 3.0 y versiones posteriores, se produce una excepción si intenta establecer un valor en un campo estático de solo inicialización.

Nota

El código de plena confianza tiene los permisos necesarios para tener acceso a constructores privados, métodos, campos y propiedades mediante reflexión.

Nota

A partir de .NET Framework 2.0 Service Pack 1, este método se puede usar para acceder a miembros no públicos si se ha concedido ReflectionPermission al autor de la llamada con la ReflectionPermissionFlag.RestrictedMemberAccess marca y si el conjunto de concesión de los miembros no públicos está restringido al conjunto de concesión del autor de la llamada o a un subconjunto de ellos. (Consulte Consideraciones de seguridad para la reflexión).

Para usar esta funcionalidad, la aplicación debe tener como destino .NET Framework 3.5 o posterior.

Se aplica a

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

Cuando se reemplaza en una clase derivada, se establece el valor del campo compatible con el objeto dado.

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

Objeto cuyo valor de campo se va a establecer.

value
Object

Valor que se va a asignar al campo.

invokeAttr
BindingFlags

Campo de Binder que especifica el tipo de enlace deseado (por ejemplo, Binder.CreateInstance o Binder.ExactBinding).

binder
Binder

Conjunto de propiedades que habilitan el enlace, la conversión de tipos de argumentos y las llamadas a miembros mediante Reflection. Si el valor de binder es null, se usa Binder.DefaultBinding.

culture
CultureInfo

Preferencias de software de una referencia cultural determinada.

Implementaciones

Excepciones

El autor de la llamada no tiene permiso para acceder a este campo.

El parámetro obj es null y el campo es un campo de instancia.

Este campo no existe en el objeto.

o bien

El parámetro value no puede convertirse y almacenarse en el campo.

Comentarios

Este método se asignará value al campo reflejado por esta instancia en obj. Si el campo es estático, obj se omitirá. En el caso de los campos no estáticos, obj debe ser una instancia de una clase que herede o declare el campo. El nuevo valor se pasa como .Object Por ejemplo, si el tipo del campo es Boolean, se pasa una instancia de Object con el valor booleano adecuado. Antes de establecer el valor, SetValue comprueba si el usuario tiene permiso de acceso.

Este método no se puede usar para establecer valores de campos estáticos de solo inicialización (readonly en C#) de forma confiable. En .NET Core 3.0 y versiones posteriores, se produce una excepción si intenta establecer un valor en un campo estático de solo inicialización.

Nota

El código de plena confianza tiene los permisos necesarios para tener acceso a constructores privados, métodos, campos y propiedades mediante reflexión.

Nota

A partir de .NET Framework 2.0 Service Pack 1, este método se puede usar para acceder a miembros no públicos si se ha concedido ReflectionPermission al autor de la llamada con la ReflectionPermissionFlag.RestrictedMemberAccess marca y si el conjunto de concesión de los miembros no públicos está restringido al conjunto de concesión del autor de la llamada o a un subconjunto de ellos. (Consulte Consideraciones de seguridad para la reflexión).

Para usar esta funcionalidad, la aplicación debe tener como destino .NET Framework 3.5 o posterior.

Se aplica a