MSDN ライブラリ
情報
要求されたトピックは次のとおりです。しかし、このトピックはこのライブラリには含まれていません。

FieldInfo.SetValue メソッド (Object, Object)

2013/12/12

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

Namespace:  System.Reflection
アセンブリ:  mscorlib (mscorlib.dll 内)

public void SetValue(
	Object obj,
	Object value
)

パラメーター

obj
型: System.Object
フィールド値が設定されるオブジェクト。
value
型: System.Object
フィールドに代入する値。

例外条件
FieldAccessException

フィールドにアクセスできません。

TargetException

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

ArgumentException

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

または

value パラメーターを変換し、フィールドに格納できません。

MethodAccessException

このメンバーは、Type.InvokeMember などの機構を通じて遅延バインディングで呼び出されます。

Windows Phone アプリでは、アクセスできるフィールドのみをリフレクションで設定できます。

このメソッドは、このインスタンスがリフレクションする、オブジェクト obj のフィールドに value を代入します。フィールドが静的な場合、obj は無視されます。非静的フィールドの場合、obj は、そのフィールドを継承または宣言しているクラスのインスタンスであることが必要です。新しい値は Object として渡されます。たとえば、このフィールドの型が Boolean の場合は、新しい値を Object のインスタンスとしてボックス化する必要があります。

バージョンについてのメモ

Windows Phone

objnull の場合、SetValue は、TargetException 例外の代わりに ArgumentNullException 例外をスローします。

パブリックかつ定数として定義されているフィールドで SetValue メソッドを呼び出した場合は、FieldAccessException 例外ではなく、MemberAccessException 例外がスローされます。

次の例では、Example クラスの各フィールドの値を取得し、その値に文字列を追加することによって値を変更して新しい値を設定します。次に、その新しい値を取得して結果を表示します。フィールドのアクセス レベルが原因でフィールド値を取得できない場合、例外がキャッチされ、メッセージが表示されます。この例では、Example クラスと Test クラスが同じアセンブリ内にあるため、internal フィールド (Visual Basic の場合は Friend フィールド) にアクセスできます。

メモメモ:

この例を実行するには、「Windows Phone での静的 TextBlock コントロールのあるコード例のビルド」を参照してください。


using System;
using System.Reflection;

public class Test
{
    public static string SA = "A public shared field.";
    internal static string SB = "A friend shared field.";
    protected static string SC = "A protected shared field.";
    private static string SD = "A private shared field.";

    public string A = "A public instance field.";
    internal string B = "A friend instance field.";
    protected string C = "A protected instance field.";
    private string D = "A private instance field.";
}

public class Example
{
    public static void Demo(System.Windows.Controls.TextBlock outputBlock)
    {
        // Create an instance of Test, and get a Type object.
        Test myInstance = new Test();
        Type t = typeof(Test);

        // Get the shared fields of Test, and change their values. This does not 
        // require an instance of Test, so Nothing is passed to SetValue.
        FieldInfo[] sharedFields = t.GetFields(BindingFlags.Public | BindingFlags.NonPublic | 
                                               BindingFlags.Static);
        foreach( FieldInfo f in sharedFields )
        {
            try
            {
                // Append a marker to the old value.
                string newValue = f.GetValue(null) + " -modified-";

                f.SetValue(null, newValue);

                outputBlock.Text += String.Format("The value of Shared field {0} is: {1}\n", 
                                                  f.Name, 
                                                  f.GetValue(null));
            }
            catch
            {
                outputBlock.Text += 
                   String.Format("The value of Shared field {0} is not accessible.\n", f.Name);
            }
        }

        // Get the instance fields of Test, and change their values for the instance 
        // created earlier.
        FieldInfo[] instanceFields = t.GetFields(BindingFlags.Public | BindingFlags.NonPublic | 
                                                 BindingFlags.Instance);
        foreach( FieldInfo f in instanceFields )
        {
            try
            {
                // Append a marker to the old value.
                string newValue = f.GetValue(myInstance) + " -modified-";

                f.SetValue(myInstance, newValue);

                outputBlock.Text += String.Format("The value of instance field {0} is: {1}\n", 
                                                  f.Name, 
                                                  f.GetValue(myInstance));
            }
            catch
            {
                outputBlock.Text += 
                   String.Format("The value of instance field {0} is not accessible.\n", f.Name);
            }
        }
    }
}

/* This example produces the following output:

The value of Shared field SA is: A public shared field. -modified-
The value of Shared field SB is: A friend shared field. -modified-
The value of Shared field SC is not accessible.
The value of Shared field SD is not accessible.
The value of instance field A is: A public instance field. -modified-
The value of instance field B is: A friend instance field. -modified-
The value of instance field C is not accessible.
The value of instance field D is not accessible.
 */


Windows Phone OS

サポート: 8.0, 7.1, 7.0

表示:
© 2016 Microsoft