FieldInfo.GetValue 메서드
파생 클래스에 재정의할 때 지정된 개체에서 지원하는 필드의 값을 반환합니다.
네임스페이스: System.Reflection
어셈블리: mscorlib(mscorlib.dll)
구문
‘선언
Public MustOverride Function GetValue ( _
obj As Object _
) As Object
‘사용 방법
Dim instance As FieldInfo
Dim obj As Object
Dim returnValue As Object
returnValue = instance.GetValue(obj)
public abstract Object GetValue (
Object obj
)
public:
virtual Object^ GetValue (
Object^ obj
) abstract
public abstract Object GetValue (
Object obj
)
public abstract function GetValue (
obj : Object
) : Object
매개 변수
- obj
필드 값이 반환될 개체입니다.
반환 값
이 인스턴스에서 리플렉션된 필드 값을 포함하는 개체입니다.
예외
예외 형식 | 조건 |
---|---|
정적 필드가 아니고 obj가 Null 참조(Visual Basic의 경우 Nothing)인 경우 |
|
리터럴로 표시된 필드에 허용되는 리터럴 형식이 들어 있지 않은 경우 |
|
호출자에 이 필드에 액세스할 권한이 없는 경우 |
|
메서드를 선언하거나 obj의 클래스에서 메서드를 상속하지 않은 경우 |
설명
정적 필드이면 obj가 무시됩니다. 비정적 필드의 경우 obj는 필드를 상속하거나 선언하는 클래스의 인스턴스여야 합니다. GetValue의 반환 형식은 Object입니다. 예를 들어, 필드가 부울 기본값을 갖는 경우 적절한 부울 값이 포함된 Object의 인스턴스가 반환됩니다. 값을 반환하기 전에 GetValue에서 사용자에게 액세스 권한이 있는지를 확인합니다.
참고
완전하게 신뢰할 수 있는 코드에 대해서는 액세스 제한이 무시됩니다. 즉, 코드를 완전히 신뢰할 수 있는 경우에는 리플렉션을 통해 private 생성자, 메서드, 필드 및 속성에 액세스하고 호출할 수 있습니다.
예제
' 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]
// 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));
}
}
// The following example demonstrates getting
// a field value directly, without having an object,
// by defining it as a static field.
using namespace System;
using namespace System::Reflection;
ref class MyClass
{
public:
static String^ val = "test";
};
int main()
{
FieldInfo^ myf = MyClass::typeid->GetField( "val" );
Console::WriteLine( myf->GetValue( nullptr ) );
MyClass::val = "hi";
Console::WriteLine( myf->GetValue( nullptr ) );
}
// The following example demonstrates getting
// a field value directly, without having an object,
// by defining it as a static field.
import System.*;
import System.Reflection.*;
class MyClass
{
public static String val = "test";
public static void main(String[] args)
{
FieldInfo myf = MyClass.class.ToType().GetField("val");
Console.WriteLine(myf.GetValue(null));
val = "hi";
Console.WriteLine(myf.GetValue(null));
} //main
} //MyClass
다음 예제에서는 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
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);
}
}
}
using namespace System;
using namespace System::Reflection;
public ref class MyClass
{
public:
String^ myFieldA;
String^ myFieldB;
MyClass()
{
myFieldA = "A public field";
myFieldB = "Another public field";
}
};
int main()
{
MyClass^ myInstance = gcnew MyClass;
// Get the type of MyClass.
Type^ myType = MyClass::typeid;
try
{
// Get the FieldInfo of MyClass.
array<FieldInfo^>^myFields = myType->GetFields( static_cast<BindingFlags>(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 );
}
}
.NET Framework 보안
- ReflectionPermission Type.InvokeMember와 같은 메커니즘을 통해 런타임에 바인딩하여 호출하는 데 필요한 권한입니다. 연관된 열거형: ReflectionPermissionFlag.MemberAccess
플랫폼
Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
.NET Framework에서 모든 플래폼의 모든 버전을 지원하지는 않습니다. 지원되는 버전의 목록은 시스템 요구 사항을 참조하십시오.
버전 정보
.NET Framework
2.0, 1.1, 1.0에서 지원
.NET Compact Framework
2.0, 1.0에서 지원