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)

Source:
FieldInfo.cs
Source:
FieldInfo.cs
Source:
FieldInfo.cs

Establece el valor del campo admitido por el objeto determinado.

C#
public virtual void SetValue (object obj, object value);
C#
public void SetValue (object? obj, object? value);
C#
public void SetValue (object obj, object value);

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.

C#
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".
 */

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

.NET 9 e outras versións
Produto Versións
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

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

Source:
FieldInfo.cs
Source:
FieldInfo.cs
Source:
FieldInfo.cs

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

C#
public abstract void SetValue (object? obj, object? value, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder? binder, System.Globalization.CultureInfo? culture);
C#
public abstract void SetValue (object obj, object value, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, System.Globalization.CultureInfo culture);

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

.NET 9 e outras versións
Produto Versións
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1