次の方法で共有


FieldInfo.SetValue メソッド

定義

指定したオブジェクトのフィールドの値を指定した値に設定します。

オーバーロード

名前 説明
SetValue(Object, Object)

指定したオブジェクトでサポートされているフィールドの値を設定します。

SetValue(Object, Object, BindingFlags, Binder, CultureInfo)

派生クラスでオーバーライドされた場合は、指定されたオブジェクトでサポートされるフィールドの値を設定します。

SetValue(Object, Object)

ソース:
FieldInfo.cs
ソース:
FieldInfo.cs
ソース:
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 ストア アプリ または ポータブル クラス ライブラリでは、代わりに Exception をキャッチします。

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

-又は-

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 専用 (C# でreadonly ) フィールドの値を確実に設定することはできません。 .NET バージョンでは、静的な init 専用フィールドに値を設定しようとすると、例外がスローされます。

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

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

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

適用対象

SetValue(Object, Object, BindingFlags, Binder, CultureInfo)

ソース:
FieldInfo.cs
ソース:
FieldInfo.cs
ソース:
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 専用 (C# でreadonly ) フィールドの値を確実に設定することはできません。 .NET では、静的な init 専用フィールドに値を設定しようとすると、例外がスローされます。

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

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

適用対象