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 for Windows ストア アプリ または ポータブル クラス ライブラリでは、代わりに基底クラスの例外 MemberAccessExceptionをキャッチします。

obj パラメーターは null で、そのフィールドはインスタンス フィールドです。

注: .NET for Windows ストア アプリ または ポータブル クラス ライブラリでは、代わりに catch を使用 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".

注釈

このメソッドは、 オブジェクト objのこのインスタンスによって反映されるフィールドに割り当てますvalue。 フィールドが静的な場合、 obj は無視されます。 非静的フィールドの場合、 obj は、フィールドを継承または宣言するクラスのインスタンスである必要があります。 新しい値は として Object渡されます。 たとえば、フィールドの型が Boolean の場合、適切なブール値を持つ の Object インスタンスが渡されます。 値を設定する前に、 SetValue ユーザーがアクセス許可を持っているかどうかを確認します。 この最後のメソッドは、次 SetValue のメソッドを呼び出すための便利なメソッドです。

このメソッドを使用して、静的な init-only (readonly C# の場合) フィールドの値を確実に設定することはできません。 .NET Core 3.0 以降のバージョンでは、静的な init 専用フィールドに値を設定しようとすると、例外がスローされます。

注意

完全に信頼されたコードには、リフレクションを使用してプライベート コンストラクター、メソッド、フィールド、プロパティにアクセスして呼び出すために必要なアクセス許可があります。

注意

.NET Framework 2.0 Service Pack 1 以降では、このメソッドを使用して、呼び出し元に フラグが付与ReflectionPermissionReflectionPermissionFlag.RestrictedMemberAccessされている場合、および非パブリック メンバーの許可セットが呼び出し元の許可セットまたはそのサブセットに制限されている場合は、非パブリック メンバーにアクセスできます。 ( リフレクションのセキュリティに関する考慮事項に関するページを参照してください)。

この機能を使用するには、アプリケーションで .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.CreateInstanceBinder.ExactBinding など) を指定する Binder のフィールド。

binder
Binder

バインディング、引数型の強制型変換、リフレクションを通じたメンバーの呼び出しを有効にする一連のプロパティ。 bindernull の場合は、Binder.DefaultBinding が使用されます。

culture
CultureInfo

特定のカルチャに関するソフトウェア上の設定。

実装

例外

呼び出し元には、このフィールドに対するアクセス許可がありません。

obj パラメーターは null で、そのフィールドはインスタンス フィールドです。

このフィールドはオブジェクト上に存在しません。

または

value パラメーターを変換してフィールドに格納することはできません。

注釈

このメソッドは、 のこのインスタンスによって反映されるフィールドにobj割り当てられますvalue。 フィールドが静的な場合、 obj は無視されます。 非静的フィールドの場合、 obj は、フィールドを継承または宣言するクラスのインスタンスである必要があります。 新しい値は として Object渡されます。 たとえば、フィールドの型が の場合、 Boolean適切なブール値を持つ の Object インスタンスが渡されます。 値を設定する前に、 SetValue ユーザーがアクセス許可を持っているかどうかを確認します。

このメソッドを使用して、静的な init-only (readonly C# の場合) フィールドの値を確実に設定することはできません。 .NET Core 3.0 以降のバージョンでは、静的な init 専用フィールドに値を設定しようとすると、例外がスローされます。

注意

完全に信頼されたコードには、リフレクションを使用してプライベート コンストラクター、メソッド、フィールド、プロパティにアクセスして呼び出すために必要なアクセス許可があります。

注意

.NET Framework 2.0 Service Pack 1 以降では、このメソッドを使用して、呼び出し元に フラグが付与ReflectionPermissionReflectionPermissionFlag.RestrictedMemberAccessされている場合、および非パブリック メンバーの許可セットが呼び出し元の許可セットまたはそのサブセットに制限されている場合は、非パブリック メンバーにアクセスできます。 ( リフレクションのセキュリティに関する考慮事項に関するページを参照してください)。

この機能を使用するには、アプリケーションで .NET Framework 3.5 以降をターゲットにする必要があります。

適用対象