FieldInfo.SetValue Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
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.
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)
- 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.
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.