FieldInfo.SetValue Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Устанавливает для поля заданного объекта указанное значение.
Перегрузки
SetValue(Object, Object) |
Задает значение поля, которое поддерживается указанным объектом. |
SetValue(Object, Object, BindingFlags, Binder, CultureInfo) |
Если переопределен производным классом, устанавливает значение поля, поддерживаемое данным объектом. |
SetValue(Object, Object)
- Исходный код:
- FieldInfo.cs
- Исходный код:
- FieldInfo.cs
- Исходный код:
- FieldInfo.cs
Задает значение поля, которое поддерживается указанным объектом.
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)
Параметры
- obj
- Object
Объект, значение поля которого будет указано.
- value
- Object
Значение, присваиваемое полю.
Реализации
Исключения
Вызывающий объект не имеет разрешения на доступ к этому полю.
Примечание. Вместо этого в .NET для приложений Магазина Windows или переносимой библиотеке классов перехватите исключение MemberAccessExceptionбазового класса , .
Параметрobj
имеет значение null
, а поле является полем экземпляра.
Примечание. Вместо этого в .NET для приложений Магазина Windows или переносимой библиотеке классов выполните перехват Exception .
Это поле не существует в объекте.
-или-
Параметр value
невозможно преобразовать и сохранить в поле.
Примеры
В следующем примере задается значение поля, возвращается и отображается значение, изменяется поле и отображается результат.
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".
Комментарии
Этот метод назначается value
полю, отражаемого этим экземпляром в объекте obj
. Если поле является статическим, obj
будет игнорироваться. Для нестатических полей должен быть экземпляром класса, obj
который наследует или объявляет поле. Новое значение передается как Object
. Например, если поле имеет тип Boolean, передается экземпляр Object
с соответствующим логическим значением. Прежде чем задать значение, проверяет, SetValue
есть ли у пользователя разрешение на доступ. Этот окончательный метод является удобным для вызова следующего SetValue
метода.
Этот метод не может использоваться для надежного задания значений статических полей, доступных только для инициализации (readonly
в C#). В .NET Core 3.0 и более поздних версиях при попытке задать значение для статического поля только для инициализации возникает исключение.
Примечание
Полностью доверенный код имеет разрешения, необходимые для доступа и вызова частных конструкторов, методов, полей и свойств с помощью отражения.
Примечание
Начиная с .NET Framework 2.0 с ReflectionPermissionFlag.RestrictedMemberAccess пакетом обновления 1 (SP1), этот метод можно использовать для доступа к недоступным членам, если вызывающему объекту предоставлен ReflectionPermission флаг и если набор разрешений для не являющихся открытыми членов ограничен набором разрешений вызывающего объекта или его подмножеством. (См. раздел Вопросы безопасности для отражения.)
Чтобы использовать эту функцию, приложение должно быть предназначено для .NET Framework 3.5 или более поздней версии.
Применяется к
SetValue(Object, Object, BindingFlags, Binder, CultureInfo)
- Исходный код:
- FieldInfo.cs
- Исходный код:
- FieldInfo.cs
- Исходный код:
- FieldInfo.cs
Если переопределен производным классом, устанавливает значение поля, поддерживаемое данным объектом.
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)
Параметры
- obj
- Object
Объект, значение поля которого будет указано.
- value
- Object
Значение, присваиваемое полю.
- invokeAttr
- BindingFlags
Поле Binder
, определяющее требуемый тип привязки (например, Binder.CreateInstance
или Binder.ExactBinding
).
- binder
- Binder
Набор свойств, который позволяет осуществлять связывание, приведение типов аргументов и вызов элементов с помощью отражения. Если параметр binder
принимает значение null
, используется свойство Binder.DefaultBinding
.
- culture
- CultureInfo
Программные настройки конкретного языка и региональных параметров.
Реализации
Исключения
Вызывающий объект не имеет разрешения на доступ к этому полю.
Параметрobj
имеет значение null
, а поле является полем экземпляра.
Это поле не существует в объекте.
-или-
Параметр value
невозможно преобразовать и сохранить в поле.
Комментарии
Этот метод назначается value
полю, отражаемого этим экземпляром в obj
. Если поле является статическим, obj
будет игнорироваться. Для нестатических полей должен быть экземпляром класса, obj
который наследует или объявляет поле. Новое значение передается как Object
. Например, если тип поля — Boolean
, передается экземпляр Object
с соответствующим логическим значением. Прежде чем задать значение, проверяет, SetValue
есть ли у пользователя разрешение на доступ.
Этот метод не может использоваться для надежного задания значений статических полей, доступных только для инициализации (readonly
в C#). В .NET Core 3.0 и более поздних версиях при попытке задать значение для статического поля только для инициализации возникает исключение.
Примечание
Полностью доверенный код имеет разрешения, необходимые для доступа и вызова частных конструкторов, методов, полей и свойств с помощью отражения.
Примечание
Начиная с .NET Framework 2.0 с ReflectionPermissionFlag.RestrictedMemberAccess пакетом обновления 1 (SP1), этот метод можно использовать для доступа к недоступным членам, если вызывающему объекту предоставлен ReflectionPermission флаг и если набор разрешений для не являющихся открытыми членов ограничен набором разрешений вызывающего объекта или его подмножеством. (См. раздел Вопросы безопасности для отражения.)
Чтобы использовать эту функцию, приложение должно быть предназначено для .NET Framework 3.5 или более поздней версии.