FieldInfo.GetValue(Object) メソッド

定義

派生クラスによってオーバーライドされた場合、指定したオブジェクトでサポートされているフィールドの値を返します。When overridden in a derived class, returns the value of a field supported by a given object.

public:
 abstract System::Object ^ GetValue(System::Object ^ obj);
public abstract object GetValue (object obj);
abstract member GetValue : obj -> obj
Public MustOverride Function GetValue (obj As Object) As Object

パラメーター

obj
Object

フィールド値が返されるオブジェクト。The object whose field value will be returned.

戻り値

Object

このインスタンスがリフレクションするフィールドの値を保持しているオブジェクト。An object containing the value of the field reflected by this instance.

実装

例外

Windows ストア アプリ用 .NET または ポータブル クラス ライブラリでは、 Exception を代わりにキャッチします。In the .NET for Windows Store apps or the Portable Class Library, catch Exception instead.

フィールドは非静的であり、objnull です。The field is non-static and obj is null.

フィールドがリテラルとマークされていますが、フィールドは許可されたリテラル型を持っていません。A field is marked literal, but the field does not have one of the accepted literal types.

Windows ストア アプリ用 .NET または ポータブル クラス ライブラリでは、基本クラスの例外である MemberAccessExceptionを代わりにキャッチします。In the .NET for Windows Store apps or the Portable Class Library, catch the base class exception, MemberAccessException, instead.

呼び出し元には、このフィールドに対するアクセス許可がありません。The caller does not have permission to access this field.

メソッドは obj のクラスで宣言も継承もされていません。The method is neither declared nor inherited by the class of obj.

次の例では、GetValue メソッドを使用して、静的フィールドの値を取得します。The following example uses the GetValue method to retrieve the value of a static field. obj 引数の値が nullであることに注意してください。Note that the value of the obj argument is null.

using namespace System;
using namespace System::Reflection;

ref class Example
{
  public:
     static String^ val = "test";
};

int main()
{
   FieldInfo^ fld = Example::typeid->GetField( "val" );
   Console::WriteLine(fld->GetValue(nullptr) );
   Example::val = "hi";
   Console::WriteLine(fld->GetValue(nullptr) );
}
// The example displays the following output:
//     test
//     hi
using System;
using System.Reflection;

class Example
{
    public static String val = "test";

    public static void Main()
    {
        FieldInfo fld = typeof(Example).GetField("val");
        Console.WriteLine(fld.GetValue(null));
        val = "hi";
        Console.WriteLine(fld.GetValue(null));
    }
}
// The example displays the following output:
//     test
//     hi
Imports System.Reflection

Class Example
    Public Shared val As String = "test"
    
    Public Shared Sub Main()
        Dim fld As FieldInfo = GetType(Example).GetField("val")
        Console.WriteLine(fld.GetValue(Nothing))
        val = "hi"
        Console.WriteLine(fld.GetValue(Nothing))
    End Sub 
End Class 
' The example displays the following output:
'     test
'     hi

次の例では、FieldsClass 型のフィールドを表す FieldInfo オブジェクトの配列を取得し、GetValue を呼び出して、fieldsInst オブジェクトの各フィールドの値を表示します。The following example retrieves an array of FieldInfo objects that represents the fields of the FieldsClass type, and then calls the GetValue to display the value of each field for the fieldsInst object.

using namespace System;
using namespace System::Reflection;

public ref class FieldsClass
{
  public:
     String^ fieldA;
     String^ fieldB;

     FieldsClass()
     {
        fieldA = "A public field";
        fieldB = "Another public field";
     }
};

int main()
{
   FieldsClass^ fieldsInst = gcnew FieldsClass;
   
   // Get the type of FieldsClass.
   Type^ fieldsType = FieldsClass::typeid;

   // Get the FieldInfo of FieldsClass.
   array<FieldInfo^>^ fields = fieldsType->GetFields(static_cast<BindingFlags>(BindingFlags::Public | BindingFlags::Instance));

   // Display the values of the fields.
   Console::WriteLine("Displaying the values of the fields of {0}:", fieldsType);
   for (int i = 0; i < fields->Length; i++)
   {
      Console::WriteLine("   {0}:\t'{1}'", 
                         fields[i]->Name, fields[i]->GetValue(fieldsInst));
   }
}
// The example displays the following output:
//     Displaying the values of the fields of FieldsClass:
//        fieldA:      'A public field'
//        fieldB:      'Another public field'
using System;
using System.Reflection;

public class FieldsClass
{
    public string fieldA;
    public string fieldB;

    public FieldsClass()
    {
        fieldA = "A public field";
        fieldB = "Another public field";
    }
}

public class Example
{
    public static void Main()
    {
        FieldsClass fieldsInst = new FieldsClass();
        // Get the type of FieldsClass.
        Type fieldsType = typeof(FieldsClass);

        // Get an array of FieldInfo objects.
        FieldInfo[] fields = fieldsType.GetFields(BindingFlags.Public
            | BindingFlags.Instance);
        // Display the values of the fields.
        Console.WriteLine("Displaying the values of the fields of {0}:",
            fieldsType);
        for(int i = 0; i < fields.Length; i++)
        {
            Console.WriteLine("   {0}:\t'{1}'",
                fields[i].Name, fields[i].GetValue(fieldsInst));
        }
    }
}
// The example displays the following output:
//     Displaying the values of the fields of FieldsClass:
//        fieldA:      'A public field'
//        fieldB:      'Another public field'
Imports System.Reflection

Public Class FieldsClass
    Public fieldA As String
    Public fieldB As String

    Public Sub New()
        fieldA = "A public field"
        fieldB = "Another public field"
    End Sub 
End Class 

Public Module Example
    Public Sub Main()
        Dim fieldsInst As New FieldsClass()
        ' Get the type of FieldsClass.
        Dim fieldsType As Type = GetType(FieldsClass)

        ' Get an array of FieldInfo objects.
        Dim fields As FieldInfo() = fieldsType.GetFields(BindingFlags.Public Or BindingFlags.Instance)
        ' Display the values of the fields.
        Console.WriteLine("Displaying the values of the fields of {0}:", fieldsType)
        For i As Integer = 0 To fields.Length - 1
            Console.WriteLine("   {0}:{2}'{1}'",
                fields(i).Name, fields(i).GetValue(fieldsInst), vbTab)
        Next 
    End Sub 
End Module
' The example displays the following output:
'     Displaying the values of the fields of FieldsClass:
'        fieldA:      'A public field'
'        fieldB:      'Another public field'

注釈

フィールドが静的である場合、obj は無視されます。If the field is static, obj is ignored. 非静的フィールドの場合、obj は、フィールドを継承または宣言するクラスのインスタンスである必要があります。For non-static fields, obj should be an instance of a class that inherits or declares the field. GetValue の戻り値の型が Objectであることに注意してください。Note that the return type of GetValue is Object. たとえば、フィールドがブール型のプリミティブ値を保持している場合は、適切なブール値を持つ Object のインスタンスが返されます。For example, if the field holds a Boolean primitive value, an instance of Object with the appropriate Boolean value is returned. 値を返す前に、GetValue によって、ユーザーがアクセス許可を持っているかどうかが確認されます。Before returning the value, GetValue checks to see if the user has access permission.

注意

完全に信頼されたコードでは、アクセス制限は無視されます。Access restrictions are ignored for fully trusted code. つまり、プライベートコンストラクター、メソッド、フィールド、およびプロパティには、コードが完全に信頼されている場合は常に、リフレクションを介してアクセスして呼び出すことができます。That is, private constructors, methods, fields, and properties can be accessed and invoked through reflection whenever the code is fully trusted.

注意

.NET Framework 2.0 Service Pack 1.NET Framework 2.0 Service Pack 1以降では、呼び出し元に ReflectionPermissionFlag.RestrictedMemberAccess フラグで ReflectionPermission が付与されている場合、および非パブリックメンバーの許可セットが呼び出し元の許可セットまたはサブセットに制限されている場合に、このメソッドを使用して非パブリックメンバーにアクセスできます。Starting with the .NET Framework 2.0 Service Pack 1.NET Framework 2.0 Service Pack 1, this method can be used to access non-public members if the caller has been granted ReflectionPermission with the ReflectionPermissionFlag.RestrictedMemberAccess flag and if the grant set of the non-public members is restricted to the caller's grant set, or a subset thereof. (「リフレクションのセキュリティに関する考慮事項」を参照してください)。(See Security Considerations for Reflection.)

この機能を使用するには、アプリケーションで .NET Framework 3.5.NET Framework 3.5 以降を対象とする必要があります。To use this functionality, your application should target the .NET Framework 3.5.NET Framework 3.5 or later.

適用対象

こちらもご覧ください