FieldInfo.SetValue Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
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.