Поделиться через


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 или более поздней версии.

Применяется к