次の方法で共有


FieldInfo.GetValue メソッド

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

Public MustOverride Function GetValue( _
   ByVal obj As Object _) As Object
[C#]
public abstract object GetValue(objectobj);
[C++]
public: virtual Object* GetValue(Object* obj) = 0;
[JScript]
public abstract function GetValue(
   obj : Object) : Object;

パラメータ

  • obj
    フィールド値が返されるオブジェクト。

戻り値

このインスタンスがリフレクションするフィールドの値を保持しているオブジェクト。

例外

例外の種類 条件
TargetException フィールドが非静的で obj が null 参照 (Visual Basic では Nothing) です。
NotSupportedException フィールドがリテラルとマークされていますが、フィールドは許可されたリテラル型を持っていません。
FieldAccessException 呼び出し元に、このフィールドに対するアクセス許可がありません。
ArgumentException メソッドが、 obj のクラスで宣言も継承もされていません。

解説

フィールドが静的な場合、 obj は無視されます。非静的フィールドの場合、 obj は、そのフィールドを継承または宣言しているクラスのインスタンスであることが必要です。 GetValue の戻り値の型はオブジェクトです。たとえば、フィールドがブール型のプリミティブ値を保持している場合、適切なブール値を持つオブジェクトのインスタンスが返されます。値を返す前に、 GetValue は、必要なアクセス許可があるかどうかを確認します。

メモ   完全に信頼されたコードでは、アクセス制限は無視されます。コードが完全に信頼されていれば、リフレクションを使用して、プライベートなコンストラクタ、メソッド、フィールド、およびプロパティにアクセスし、それらを呼び出すことができます。

使用例

 
' The following example demonstrates getting
' a field value directly, without having an object,
' by defining it as a static field.
Imports System
Imports System.Reflection

Class [MyClass]
    Public Shared val As [String] = "test"
    Public Shared Sub Main()
        Dim myf As FieldInfo = GetType([MyClass]).GetField("val")
        Console.WriteLine(myf.GetValue(Nothing))
        val = "hi"
        Console.WriteLine(myf.GetValue(Nothing))
    End Sub 'Main
End Class '[MyClass]

[C#] 
// The following example demonstrates getting
// a field value directly, without having an object,
// by defining it as a static field.

using System;
using System.Reflection;

class MyClass
{
    public static String val = "test";
    public static void Main()
    {
        FieldInfo myf = typeof(MyClass).GetField("val");
        Console.WriteLine(myf.GetValue(null));
        val = "hi";
        Console.WriteLine(myf.GetValue(null));
    }
}

[C++] 
// The following example demonstrates getting
// a field value directly, without having an object,
// by defining it as a static field.

#using <mscorlib.dll>

using namespace System;
using namespace System::Reflection;

__gc class MyClass {
public:
   static String*  val = S"test";
};

int main() {
   FieldInfo*  myf = __typeof(MyClass)->GetField(S"val");
   Console::WriteLine(myf->GetValue(0));
   MyClass::val = S"hi";
   Console::WriteLine(myf->GetValue(0));
}

[Visual Basic, C#, C++] MyClass のフィールドを取得し、各フィールドの値を表示する例を次に示します。

 

Imports System
Imports System.Reflection
Imports Microsoft.VisualBasic

Public Class MyClass1
    Public myFieldA As String
    Public myFieldB As String

    Public Sub New()
        myFieldA = "A public field"
        myFieldB = "Another public field"
    End Sub 'New
End Class 'MyClass1

Public Class FieldInfo_GetValue

    Public Shared Sub Main()
        Dim myInstance As New MyClass1()
        ' Get the type of MyClass1.
        Dim myType As Type = GetType(MyClass1)
        Try
            ' Get the FieldInfo of MyClass1.
            Dim myFields As FieldInfo() = myType.GetFields((BindingFlags.Public Or BindingFlags.Instance))
            ' Display the values of the fields.
            Console.WriteLine(ControlChars.NewLine & "Displaying the values of the fields of {0}." & ControlChars.NewLine, myType.ToString())
            Dim i As Integer
            For i = 0 To myFields.Length - 1
                Console.WriteLine("The value of the field {0} is: {1}", myFields(i).Name, myFields(i).GetValue(myInstance))
            Next i
        Catch e As FieldAccessException
            Console.WriteLine("FieldAccessException : {0}", e.Message.ToString())
        Catch e As TargetException
            Console.WriteLine("TargetException : {0}", e.Message.ToString())
        Catch e As ExecutionEngineException
            Console.WriteLine("ExecutionEngineException : {0}", e.Message.ToString())
        Catch e As MemberAccessException
            Console.WriteLine("MemberAccessException : {0}", e.Message.ToString())
        Catch e As Exception
            Console.WriteLine("Exception : {0}", e.Message.ToString())
        End Try
    End Sub 'Main
End Class 'FieldInfo_GetValue

[C#] 

using System;
using System.Reflection;

public class MyClass
{
    public string myFieldA;
    public string myFieldB; 
    public MyClass()
    {
        myFieldA = "A public field";
        myFieldB = "Another public field";
    }
}

public class FieldInfo_GetValue
{
    public static void Main()
    {
        MyClass myInstance = new MyClass();
        // Get the type of MyClass.
        Type myType = typeof(MyClass);
        try
        {
            // Get the FieldInfo of MyClass.
            FieldInfo[] myFields = myType.GetFields(BindingFlags.Public 
                | BindingFlags.Instance);
            // Display the values of the fields.
            Console.WriteLine("\nDisplaying the values of the fields of {0}.\n",
                myType);
            for(int i = 0; i < myFields.Length; i++)
            {
                Console.WriteLine("The value of {0} is: {1}",
                    myFields[i].Name, myFields[i].GetValue(myInstance));
            }
        }  
        catch(FieldAccessException e)
        {
            Console.WriteLine("FieldAccessException : {0}", e.Message);
        }
        catch(TargetException e)
        {
            Console.WriteLine("TargetException : {0}", e.Message);
        }
        catch(ExecutionEngineException e)
        {
            Console.WriteLine("ExecutionEngineException : {0}", e.Message);
        }
        catch(MemberAccessException e)
        {
            Console.WriteLine("MemberAccessException : {0}", e.Message);
        }
        catch(Exception e)
        {
            Console.WriteLine("Exception : {0}", e.Message);
        }
    }
}

[C++] 

#using <mscorlib.dll>

using namespace System;
using namespace System::Reflection;

public __gc class MyClass 
{
public:
   String* myFieldA;
   String* myFieldB; 
   MyClass()
   {
      myFieldA = S"A public field";
      myFieldB = S"Another public field";
   }
};

int main()
{
   MyClass* myInstance = new MyClass();
   // Get the type of MyClass.
   Type* myType = __typeof(MyClass);
   try {
      // Get the FieldInfo of MyClass.
      FieldInfo* myFields[] = myType->GetFields(
         static_cast<BindingFlags>(BindingFlags::Public | BindingFlags::Instance));
      // Display the values of the fields.
      Console::WriteLine(S"\nDisplaying the values of the fields of {0}.\n",
         myType);
      for (int i = 0; i < myFields->Length; i++) {
         Console::WriteLine(S"The value of {0} is: {1}",
            myFields[i]->Name, myFields[i]->GetValue(myInstance));
      }
   } catch (FieldAccessException* e) {
      Console::WriteLine(S"FieldAccessException : {0}", e->Message);
   } catch (TargetException* e) {
      Console::WriteLine(S"TargetException : {0}", e->Message);
   } catch (ExecutionEngineException* e) {
      Console::WriteLine(S"ExecutionEngineException : {0}", e->Message);
   } catch (MemberAccessException* e) {
      Console::WriteLine(S"MemberAccessException : {0}", e->Message);
   } catch (Exception* e) {
      Console::WriteLine(S"Exception : {0}", e->Message);
   }
}

[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ, .NET Compact Framework - Windows CE .NET, Common Language Infrastructure (CLI) Standard

.NET Framework セキュリティ:

参照

FieldInfo クラス | FieldInfo メンバ | System.Reflection 名前空間 | Object