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 セキュリティ:
- ReflectionPermission (Type.InvokeMember などの機構を通じて遅延バインディングで呼び出すときに必要なアクセス許可) ReflectionPermissionFlag.MemberAccess (関連する列挙体)
参照
FieldInfo クラス | FieldInfo メンバ | System.Reflection 名前空間 | Object