FieldInfo.SetValue Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Ustawia wartość pola dla danego obiektu na daną wartość.
Przeciążenia
SetValue(Object, Object) |
Ustawia wartość pola obsługiwanego przez dany obiekt. |
SetValue(Object, Object, BindingFlags, Binder, CultureInfo) |
Po zastąpieniu w klasie pochodnej ustawia wartość pola obsługiwanego przez dany obiekt. |
SetValue(Object, Object)
- Źródło:
- FieldInfo.cs
- Źródło:
- FieldInfo.cs
- Źródło:
- FieldInfo.cs
Ustawia wartość pola obsługiwanego przez dany obiekt.
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)
Parametry
- obj
- Object
Obiekt, którego wartość pola zostanie ustawiona.
- value
- Object
Wartość do przypisania do pola.
Implementuje
Wyjątki
Obiekt wywołujący nie ma uprawnień dostępu do tego pola.
Uwaga: na platformie .NET dla aplikacji ze Sklepu Windows lub przenośnej biblioteki klas przechwyć wyjątek klasy bazowej , MemberAccessExceptionzamiast tego.
Parametr obj
jest null
i pole jest polem wystąpienia.
Uwaga: w programie .NET dla aplikacji ze Sklepu Windows lub w przenośnej bibliotece klas przechwyć Exception zamiast tego.
Pole nie istnieje w obiekcie.
-lub-
Nie value
można przekonwertować i zapisać parametru w polu.
Przykłady
Poniższy przykład ustawia wartość pola, pobiera i wyświetla wartość, modyfikuje pole i wyświetla wynik.
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".
Uwagi
Ta metoda spowoduje przypisanie value
do pola odzwierciedlonego przez to wystąpienie w obiekcie obj
. Jeśli pole jest statyczne, obj
zostanie zignorowane. W przypadku pól obj
niestatycznych należy być wystąpieniem klasy, która dziedziczy lub deklaruje pole. Nowa wartość jest przekazywana jako Object
. Jeśli na przykład typ pola jest wartością logiczną, zostanie przekazane wystąpienie Object
z odpowiednią wartością logiczną. Przed ustawieniem wartości sprawdza, SetValue
czy użytkownik ma uprawnienia dostępu. Ta ostateczna metoda jest wygodną metodą wywoływania następującej SetValue
metody.
Tej metody nie można użyć do niezawodnego ustawiania wartości pól statycznych, tylko do inicjowania (readonly
w języku C#). W wersjach .NET Core 3.0 i nowszych wyjątek jest zgłaszany, jeśli próbujesz ustawić wartość w polu statycznym, tylko do inicjowania.
Uwaga
W pełni zaufany kod ma uprawnienia potrzebne do uzyskiwania dostępu do prywatnych konstruktorów, metod, pól i właściwości przy użyciu odbicia i wywoływania ich.
Uwaga
Począwszy od programu .NET Framework 2.0 z dodatkiem Service Pack 1, ta metoda może służyć do uzyskiwania dostępu do elementów członkowskich innych niż publiczne, jeśli obiekt wywołujący otrzymał ReflectionPermissionReflectionPermissionFlag.RestrictedMemberAccess flagę, a zestaw dotacji niepublizowanych członków jest ograniczony do zestawu dotacji osoby wywołującej lub jej podzbioru. (Zobacz Zagadnienia dotyczące zabezpieczeń do odbicia).
Aby korzystać z tej funkcji, aplikacja powinna być docelowa dla programu .NET Framework 3.5 lub nowszego.
Dotyczy
SetValue(Object, Object, BindingFlags, Binder, CultureInfo)
- Źródło:
- FieldInfo.cs
- Źródło:
- FieldInfo.cs
- Źródło:
- FieldInfo.cs
Po zastąpieniu w klasie pochodnej ustawia wartość pola obsługiwanego przez dany obiekt.
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)
Parametry
- obj
- Object
Obiekt, którego wartość pola zostanie ustawiona.
- value
- Object
Wartość do przypisania do pola.
- invokeAttr
- BindingFlags
Pole, Binder
które określa typ powiązania, który jest żądany (na przykład Binder.CreateInstance
lub Binder.ExactBinding
).
- binder
- Binder
Zestaw właściwości, który umożliwia powiązanie, wymuszanie typów argumentów i wywołanie elementów członkowskich przez odbicie. Jeśli binder
jest to null
, Binder.DefaultBinding
jest używany.
- culture
- CultureInfo
Preferencje dotyczące oprogramowania określonej kultury.
Implementuje
Wyjątki
Obiekt wywołujący nie ma uprawnień dostępu do tego pola.
Parametr obj
jest null
i pole jest polem wystąpienia.
Pole nie istnieje w obiekcie.
-lub-
Nie value
można przekonwertować i zapisać parametru w polu.
Uwagi
Ta metoda spowoduje przypisanie value
do pola odzwierciedlonego przez to wystąpienie w pliku obj
. Jeśli pole jest statyczne, obj
zostanie zignorowane. W przypadku pól obj
niestatycznych należy być wystąpieniem klasy, która dziedziczy lub deklaruje pole. Nowa wartość jest przekazywana jako Object
. Jeśli na przykład typ pola to Boolean
, zostanie przekazane wystąpienie Object
z odpowiednią wartością logiczną. Przed ustawieniem wartości sprawdza, SetValue
czy użytkownik ma uprawnienia dostępu.
Tej metody nie można użyć do niezawodnego ustawiania wartości pól statycznych, tylko do inicjowania (readonly
w języku C#). W wersjach .NET Core 3.0 i nowszych wyjątek jest zgłaszany, jeśli próbujesz ustawić wartość w polu statycznym, tylko do inicjowania.
Uwaga
W pełni zaufany kod ma uprawnienia potrzebne do uzyskiwania dostępu do prywatnych konstruktorów, metod, pól i właściwości przy użyciu odbicia i wywoływania ich.
Uwaga
Począwszy od programu .NET Framework 2.0 z dodatkiem Service Pack 1, ta metoda może służyć do uzyskiwania dostępu do elementów członkowskich innych niż publiczne, jeśli obiekt wywołujący otrzymał ReflectionPermissionReflectionPermissionFlag.RestrictedMemberAccess flagę, a zestaw dotacji niepublizowanych członków jest ograniczony do zestawu dotacji osoby wywołującej lub jej podzbioru. (Zobacz Zagadnienia dotyczące zabezpieczeń do odbicia).
Aby korzystać z tej funkcji, aplikacja powinna być docelowa dla programu .NET Framework 3.5 lub nowszego.