Type.InvokeMember 메서드
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
현재 Type의 특정 멤버를 호출합니다.
오버로드
InvokeMember(String, BindingFlags, Binder, Object, Object[]) |
지정된 바인딩 제약 조건과 인수 목록을 사용하여 지정된 멤버를 호출합니다. |
InvokeMember(String, BindingFlags, Binder, Object, Object[], CultureInfo) |
지정된 바인딩 제약 조건과 지정된 인수 목록 및 문화권을 사용하여 지정된 멤버를 호출합니다. |
InvokeMember(String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[]) |
파생 클래스에서 재정의되면, 지정된 바인딩 제약 조건과 지정된 인수 목록, 한정자 및 문화권을 사용하여 지정된 멤버를 호출합니다. |
InvokeMember(String, BindingFlags, Binder, Object, Object[])
- Source:
- Type.cs
- Source:
- Type.cs
- Source:
- Type.cs
지정된 바인딩 제약 조건과 인수 목록을 사용하여 지정된 멤버를 호출합니다.
public:
System::Object ^ InvokeMember(System::String ^ name, System::Reflection::BindingFlags invokeAttr, System::Reflection::Binder ^ binder, System::Object ^ target, cli::array <System::Object ^> ^ args);
public:
virtual System::Object ^ InvokeMember(System::String ^ name, System::Reflection::BindingFlags invokeAttr, System::Reflection::Binder ^ binder, System::Object ^ target, cli::array <System::Object ^> ^ args);
public object? InvokeMember (string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder? binder, object? target, object?[]? args);
public object InvokeMember (string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, object target, object[] args);
member this.InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] -> obj
abstract member InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] -> obj
override this.InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] -> obj
Public Function InvokeMember (name As String, invokeAttr As BindingFlags, binder As Binder, target As Object, args As Object()) As Object
매개 변수
- name
- String
호출할 생성자, 메서드, 속성 또는 필드 멤버의 이름이 포함된 문자열입니다.
또는
기본 멤버를 호출하는 빈 문자열("")입니다.
또는
IDispatch
멤버의 경우 DispID를 나타내는 문자열(예: "[DispID=3]")입니다.
- invokeAttr
- BindingFlags
검색 방법을 지정하는 열거형 값의 비트 조합입니다. 액세스 권한은 BindingFlags
, Public
, NonPublic
, Private
, InvokeMethod
등과 같은 GetField
중 하나가 될 수 있습니다. 조회 형식을 지정할 필요가 없습니다. 조회 형식을 생략하면 BindingFlags.Public
| BindingFlags.Instance
| BindingFlags.Static
이 사용됩니다.
- binder
- Binder
속성 집합을 정의하고 바인딩을 활성화하는 개체입니다. 이 개체는 또한 리플렉션을 통해 오버로드된 메서드를 선택할 수 있고 인수 형식을 강제 변환할 수 있으며 멤버를 호출할 수도 있습니다.
또는
Nothing
를 사용하려면 null 참조(Visual Basic의 경우 DefaultBinder)입니다. 변수 인수를 사용하여 메서드 오버로드를 호출하려면 Binder 개체를 명시적으로 정의해야 할 수도 있습니다.
- target
- Object
지정한 멤버를 호출할 개체입니다.
- args
- Object[]
호출할 멤버에 전달하는 인수를 포함하는 배열입니다.
반환
호출된 멤버의 반환 값을 나타내는 개체입니다.
구현
예외
invokeAttr
에 CreateInstance
가 포함되어 있지 않으며 name
이 null
입니다.
invokeAttr
이 올바른 BindingFlags 특성이 아닙니다.
또는
invokeAttr
에 InvokeMethod
, CreateInstance
, GetField
, SetField
, GetProperty
또는 SetProperty
바인딩 플래그 중 하나가 포함되어 있지 않습니다.
또는
invokeAttr
에 CreateInstance
, InvokeMethod
, GetField
, SetField
또는 GetProperty
와 결합된 SetProperty
가 포함되어 있습니다.
또는
invokeAttr
에 GetField
와 SetField
가 둘 다 포함되어 있습니다.
또는
invokeAttr
에 GetProperty
와 SetProperty
가 둘 다 포함되어 있습니다.
또는
invokeAttr
에 InvokeMethod
또는 SetField
와 결합된 SetProperty
가 포함되어 있습니다.
또는
invokeAttr
에 SetField
가 포함되어 있으며 args
에 둘 이상의 요소가 있습니다.
또는
이 메서드가 COM 개체에 대해 호출되고 다음 바인딩 플래그 중 하나가 BindingFlags.InvokeMethod
, BindingFlags.GetProperty
, BindingFlags.SetProperty
, BindingFlags.PutDispProperty
또는 BindingFlags.PutRefDispProperty
로 전달되지 않았습니다.
또는
명명된 매개 변수 배열 중 하나에 null
인 문자열이 포함되어 있습니다.
지정된 멤버가 클래스 이니셜라이저입니다.
필드 또는 속성을 찾을 수 없습니다.
args
의 인수와 일치하는 메서드를 찾을 수 없습니다.
또는
현재 Type 개체가 개방형 매개 변수를 포함하는 형식, 즉, ContainsGenericParameters가 true
를 반환하는 형식을 나타냅니다.
지정된 멤버를 target
에 대해 호출할 수 없습니다.
두 개 이상의 메서드가 바인딩 기준과 일치합니다.
.NET Compact Framework에서는 현재 이 메서드를 지원하지 않습니다.
name
이 나타내는 메서드에 두 개 이상의 제네릭 형식 매개 변수가 지정되지 않았습니다. 즉, 메서드의 ContainsGenericParameters 속성이 true
를 반환합니다.
예제
다음 예제에서는 를 사용하여 InvokeMember
형식의 멤버에 액세스합니다.
using namespace System;
using namespace System::Reflection;
// This sample class has a field, constructor, method, and property.
ref class MyType
{
private:
Int32 myField;
public:
MyType( interior_ptr<Int32> x )
{
*x *= 5;
}
virtual String^ ToString() override
{
return myField.ToString();
}
property Int32 MyProp
{
Int32 get()
{
return myField;
}
void set( Int32 value )
{
if ( value < 1 )
throw gcnew ArgumentOutOfRangeException( "value",value,"value must be > 0" );
myField = value;
}
}
};
int main()
{
Type^ t = MyType::typeid;
// Create an instance of a type.
array<Object^>^args = {8};
Console::WriteLine( "The value of x before the constructor is called is {0}.", args[ 0 ] );
Object^ obj = t->InvokeMember( nullptr, static_cast<BindingFlags>(BindingFlags::DeclaredOnly | BindingFlags::Public | BindingFlags::NonPublic | BindingFlags::Instance | BindingFlags::CreateInstance), nullptr, nullptr, args );
Console::WriteLine( "Type: {0}", obj->GetType() );
Console::WriteLine( "The value of x after the constructor returns is {0}.", args[ 0 ] );
// Read and write to a field.
array<Object^>^obj5 = {5};
t->InvokeMember( "myField", static_cast<BindingFlags>(BindingFlags::DeclaredOnly | BindingFlags::Public | BindingFlags::NonPublic | BindingFlags::Instance | BindingFlags::SetField), nullptr, obj, obj5 );
Int32 v = safe_cast<Int32>(t->InvokeMember( "myField", static_cast<BindingFlags>(BindingFlags::DeclaredOnly | BindingFlags::Public | BindingFlags::NonPublic | BindingFlags::Instance | BindingFlags::GetField), nullptr, obj, nullptr ));
Console::WriteLine( "myField: {0}", v );
// Call a method.
String^ s = safe_cast<String^>(t->InvokeMember( "ToString", static_cast<BindingFlags>(BindingFlags::DeclaredOnly | BindingFlags::Public | BindingFlags::NonPublic | BindingFlags::Instance | BindingFlags::InvokeMethod), nullptr, obj, nullptr ));
Console::WriteLine( "ToString: {0}", s );
// Read and write a property. First, attempt to assign an
// invalid value; then assign a valid value; finally, get
// the value.
try
{
// Assign the value zero to MyProp. The Property Set
// throws an exception, because zero is an invalid value.
// InvokeMember catches the exception, and throws
// TargetInvocationException. To discover the real cause
// you must catch TargetInvocationException and examine
// the inner exception.
array<Object^>^obj0 = {(int^)0};
t->InvokeMember( "MyProp", static_cast<BindingFlags>(BindingFlags::DeclaredOnly | BindingFlags::Public | BindingFlags::NonPublic | BindingFlags::Instance | BindingFlags::SetProperty), nullptr, obj, obj0 );
}
catch ( TargetInvocationException^ e )
{
// If the property assignment failed for some unexpected
// reason, rethrow the TargetInvocationException.
if ( e->InnerException->GetType() != ArgumentOutOfRangeException::typeid )
throw;
Console::WriteLine( "An invalid value was assigned to MyProp." );
}
array<Object^>^obj2 = {2};
t->InvokeMember( "MyProp", static_cast<BindingFlags>(BindingFlags::DeclaredOnly | BindingFlags::Public | BindingFlags::NonPublic | BindingFlags::Instance | BindingFlags::SetProperty), nullptr, obj, obj2 );
v = safe_cast<Int32>(t->InvokeMember( "MyProp", static_cast<BindingFlags>(BindingFlags::DeclaredOnly | BindingFlags::Public | BindingFlags::NonPublic | BindingFlags::Instance | BindingFlags::GetProperty), nullptr, obj, nullptr ));
Console::WriteLine( "MyProp: {0}", v );
}
using System;
using System.Reflection;
// This sample class has a field, constructor, method, and property.
class MyType
{
Int32 myField;
public MyType(ref Int32 x) {x *= 5;}
public override String ToString() {return myField.ToString();}
public Int32 MyProp
{
get {return myField;}
set
{
if (value < 1)
throw new ArgumentOutOfRangeException("value", value, "value must be > 0");
myField = value;
}
}
}
class MyApp
{
static void Main()
{
Type t = typeof(MyType);
// Create an instance of a type.
Object[] args = new Object[] {8};
Console.WriteLine("The value of x before the constructor is called is {0}.", args[0]);
Object obj = t.InvokeMember(null,
BindingFlags.DeclaredOnly |
BindingFlags.Public | BindingFlags.NonPublic |
BindingFlags.Instance | BindingFlags.CreateInstance, null, null, args);
Console.WriteLine("Type: " + obj.GetType().ToString());
Console.WriteLine("The value of x after the constructor returns is {0}.", args[0]);
// Read and write to a field.
t.InvokeMember("myField",
BindingFlags.DeclaredOnly |
BindingFlags.Public | BindingFlags.NonPublic |
BindingFlags.Instance | BindingFlags.SetField, null, obj, new Object[] {5});
Int32 v = (Int32) t.InvokeMember("myField",
BindingFlags.DeclaredOnly |
BindingFlags.Public | BindingFlags.NonPublic |
BindingFlags.Instance | BindingFlags.GetField, null, obj, null);
Console.WriteLine("myField: " + v);
// Call a method.
String s = (String) t.InvokeMember("ToString",
BindingFlags.DeclaredOnly |
BindingFlags.Public | BindingFlags.NonPublic |
BindingFlags.Instance | BindingFlags.InvokeMethod, null, obj, null);
Console.WriteLine("ToString: " + s);
// Read and write a property. First, attempt to assign an
// invalid value; then assign a valid value; finally, get
// the value.
try
{
// Assign the value zero to MyProp. The Property Set
// throws an exception, because zero is an invalid value.
// InvokeMember catches the exception, and throws
// TargetInvocationException. To discover the real cause
// you must catch TargetInvocationException and examine
// the inner exception.
t.InvokeMember("MyProp",
BindingFlags.DeclaredOnly |
BindingFlags.Public | BindingFlags.NonPublic |
BindingFlags.Instance | BindingFlags.SetProperty, null, obj, new Object[] {0});
}
catch (TargetInvocationException e)
{
// If the property assignment failed for some unexpected
// reason, rethrow the TargetInvocationException.
if (e.InnerException.GetType() !=
typeof(ArgumentOutOfRangeException))
throw;
Console.WriteLine("An invalid value was assigned to MyProp.");
}
t.InvokeMember("MyProp",
BindingFlags.DeclaredOnly |
BindingFlags.Public | BindingFlags.NonPublic |
BindingFlags.Instance | BindingFlags.SetProperty, null, obj, new Object[] {2});
v = (Int32) t.InvokeMember("MyProp",
BindingFlags.DeclaredOnly |
BindingFlags.Public | BindingFlags.NonPublic |
BindingFlags.Instance | BindingFlags.GetProperty, null, obj, null);
Console.WriteLine("MyProp: " + v);
}
}
open System
open System.Reflection
// This sample class has a field, constructor, method, and property.
type MyType() =
let mutable myField = 0
member _.MyType(x: int byref) =
x <- x * 5
override _.ToString() =
string myField
member _.MyProp
with get () = myField
and set value =
if value < 1 then
raise (ArgumentOutOfRangeException("value", value, "value must be > 0"))
myField <- value
let t = typeof<MyType>
// Create an instance of a type.
let args = Array.zeroCreate<obj> 8
printfn $"The value of x before the constructor is called is {args[0]}."
let obj = t.InvokeMember(null,
BindingFlags.DeclaredOnly |||
BindingFlags.Public ||| BindingFlags.NonPublic |||
BindingFlags.Instance ||| BindingFlags.CreateInstance, null, null, args)
printfn $"Type: {obj.GetType()}"
printfn $"The value of x after the constructor returns is {args[0]}."
// Read and write to a field.
t.InvokeMember("myField",
BindingFlags.DeclaredOnly |||
BindingFlags.Public ||| BindingFlags.NonPublic |||
BindingFlags.Instance ||| BindingFlags.SetField, null, obj, Array.zeroCreate<obj> 5) |> ignore
let v = t.InvokeMember("myField",
BindingFlags.DeclaredOnly |||
BindingFlags.Public ||| BindingFlags.NonPublic |||
BindingFlags.Instance ||| BindingFlags.GetField, null, obj, null) :?> int
printfn $"myField: {v}"
// Call a method.
let s = t.InvokeMember("ToString",
BindingFlags.DeclaredOnly |||
BindingFlags.Public ||| BindingFlags.NonPublic |||
BindingFlags.Instance ||| BindingFlags.InvokeMethod, null, obj, null) :?> string
printfn $"ToString: {s}"
// Read and write a property. First, attempt to assign an
// invalid value then assign a valid value finally, get
// the value.
try
// Assign the value zero to MyProp. The Property Set
// throws an exception, because zero is an invalid value.
// InvokeMember catches the exception, and throws
// TargetInvocationException. To discover the real cause
// you must catch TargetInvocationException and examine
// the inner exception.
t.InvokeMember("MyProp",
BindingFlags.DeclaredOnly |||
BindingFlags.Public ||| BindingFlags.NonPublic |||
BindingFlags.Instance ||| BindingFlags.SetProperty, null, obj, Array.zeroCreate<obj> 0) |> ignore
with :? TargetInvocationException as e ->
// If the property assignment failed for some unexpected
// reason, rethrow the TargetInvocationException.
if e.InnerException.GetType() <> typeof<ArgumentOutOfRangeException> then
reraise ()
printfn "An invalid value was assigned to MyProp."
t.InvokeMember("MyProp",
BindingFlags.DeclaredOnly |||
BindingFlags.Public ||| BindingFlags.NonPublic |||
BindingFlags.Instance ||| BindingFlags.SetProperty, null, obj, Array.zeroCreate<obj> 2) |> ignore
let v2 = t.InvokeMember("MyProp",
BindingFlags.DeclaredOnly |||
BindingFlags.Public ||| BindingFlags.NonPublic |||
BindingFlags.Instance ||| BindingFlags.GetProperty, null, obj, null)
printfn $"MyProp: {v2}"
Imports System.Reflection
' This sample class has a field, constructor, method, and property.
Class MyType
Private myField As Int32
Public Sub New(ByRef x As Int32)
x *= 5
End Sub
Public Overrides Function ToString() As [String]
Return myField.ToString()
End Function 'ToString
Public Property MyProp() As Int32
Get
Return myField
End Get
Set(ByVal Value As Int32)
If Value < 1 Then
Throw New ArgumentOutOfRangeException("value", Value, "value must be > 0")
End If
myField = Value
End Set
End Property
End Class
Class MyApp
Shared Sub Main()
Dim t As Type = GetType(MyType)
' Create an instance of a type.
Dim args() As [Object] = {8}
Console.WriteLine("The value of x before the constructor is called is {0}.", args(0))
Dim obj As [Object] = t.InvokeMember(Nothing, BindingFlags.DeclaredOnly Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.CreateInstance, Nothing, Nothing, args)
Console.WriteLine("Type: {0}", obj.GetType().ToString())
Console.WriteLine("The value of x after the constructor returns is {0}.", args(0))
' Read and write to a field.
t.InvokeMember("myField", BindingFlags.DeclaredOnly Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.SetField, Nothing, obj, New [Object]() {5})
Dim v As Int32 = CType(t.InvokeMember("myField", BindingFlags.DeclaredOnly Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.GetField, Nothing, obj, Nothing), Int32)
Console.WriteLine("myField: {0}", v)
' Call a method.
Dim s As [String] = CType(t.InvokeMember("ToString", BindingFlags.DeclaredOnly Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.InvokeMethod, Nothing, obj, Nothing), [String])
Console.WriteLine("ToString: {0}", s)
' Read and write a property. First, attempt to assign an
' invalid value; then assign a valid value; finally, get
' the value.
Try
' Assign the value zero to MyProp. The Property Set
' throws an exception, because zero is an invalid value.
' InvokeMember catches the exception, and throws
' TargetInvocationException. To discover the real cause
' you must catch TargetInvocationException and examine
' the inner exception.
t.InvokeMember("MyProp", BindingFlags.DeclaredOnly Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.SetProperty, Nothing, obj, New [Object]() {0})
Catch e As TargetInvocationException
' If the property assignment failed for some unexpected
' reason, rethrow the TargetInvocationException.
If Not e.InnerException.GetType() Is GetType(ArgumentOutOfRangeException) Then
Throw
End If
Console.WriteLine("An invalid value was assigned to MyProp.")
End Try
t.InvokeMember("MyProp", BindingFlags.DeclaredOnly Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.SetProperty, Nothing, obj, New [Object]() {2})
v = CType(t.InvokeMember("MyProp", BindingFlags.DeclaredOnly Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.GetProperty, Nothing, obj, Nothing), Int32)
Console.WriteLine("MyProp: {0}", v)
End Sub
End Class
설명
참고
를 사용하여 InvokeMember 제네릭 메서드를 호출할 수 없습니다.
다음 BindingFlags 필터 플래그를 사용하여 검색에 포함할 멤버를 정의할 수 있습니다.
검색에 공용 멤버를 포함하도록 지정
BindingFlags.Public
합니다.비공용 멤버(즉, 프라이빗 및 보호된 멤버)를 검색에 포함하도록 지정
BindingFlags.NonPublic
합니다.계층 구조에 정적 멤버를 포함하도록 지정
BindingFlags.FlattenHierarchy
합니다.
다음 BindingFlags 한정자 플래그를 사용하여 검색 작동 방식을 변경할 수 있습니다.
BindingFlags.IgnoreCase
의name
대/소문자를 무시합니다.BindingFlags.DeclaredOnly
에 선언된 Type멤버만 검색하려면 단순히 상속된 멤버가 아닙니다.
다음 BindingFlags 호출 플래그를 사용하여 멤버로 수행할 작업을 나타낼 수 있습니다.
CreateInstance
생성자를 호출합니다.name
는 무시됩니다. 다른 호출 플래그에서는 유효하지 않습니다.InvokeMethod
메서드를 호출하지만 생성자 또는 형식 이니셜라이저는 호출하지 않습니다. 또는SetProperty
에서SetField
유효하지 않습니다. 가 자체적으로 지정된 경우InvokeMethod
,BindingFlags.Public
BindingFlags.Instance
및BindingFlags.Static
가 자동으로 포함됩니다.GetField
필드의 값을 가져옵니다. 에서SetField
유효하지 않습니다.SetField
필드 값을 설정하려면 입니다. 에서GetField
유효하지 않습니다.GetProperty
속성을 가져옵니다. 에서SetProperty
유효하지 않습니다.SetProperty
속성을 설정하려면 입니다. 에서GetProperty
유효하지 않습니다.
자세한 내용은 System.Reflection.BindingFlags를 참조하세요.
다음 두 조건이 모두 true인 경우 메서드가 호출됩니다.
메서드 선언의 매개 변수 수는 배열의 인수 수와 같습니다(기본 인수
args
가 멤버에 정의되고BindingFlags.OptionalParamBinding
지정되지 않는 한).각 인수의 형식은 바인더가 매개 변수 형식으로 변환할 수 있습니다.
바인더는 일치하는 모든 메서드를 찾습니다. 이러한 메서드는 요청된 바인딩 유형(값 InvokeMethod
,BindingFlagsGetProperty
등)을 기반으로 합니다. 메서드 집합은 이름, 인수 수 및 바인더에 정의된 검색 한정자 집합으로 필터링됩니다.
메서드를 선택한 후에는 메서드가 호출됩니다. 접근성은 해당 시점에서 확인됩니다. 검색은 메서드와 연결된 접근성 특성에 따라 검색되는 메서드 집합을 제어할 수 있습니다. Binder.BindToMethod 클래스의 Binder 메서드는 호출할 메서드를 선택해야 합니다. 기본 바인더는 가장 구체적인 일치 항목을 선택합니다.
액세스 제한은 완전히 신뢰할 수 있는 코드에 대해 무시됩니다. 즉, 코드를 완전히 신뢰할 때마다 프라이빗 생성자, 메서드, 필드 및 속성에 액세스하고 호출 System.Reflection 할 수 있습니다.
를 사용하여 Type.InvokeMember
을 지정하여 필드를 특정 값으로 설정할 수 있습니다 BindingFlags.SetField. 예를 들어 C 클래스에서 F라는 공용 instance 필드를 설정하고 F가 String
인 경우 다음과 같은 코드를 사용할 수 있습니다.
typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {"strings new value"});
F가 인 String[]
경우 다음과 같은 코드를 사용할 수 있습니다.
typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {new String[]{"a","z","c","d"}});
필드 F를 이 새 배열로 초기화합니다. 다음과 같은 코드를 사용하여 값의 인덱스와 다음 값을 제공하여 배열의 위치를 설정하는 데 사용할 Type.InvokeMember
수도 있습니다.
typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {1, "b"});
그러면 F가 보유하는 배열의 문자열 "z"가 문자열 "b"로 변경됩니다.
멤버를 호출할 IDispatch
때 문자열 형식 "[DispID=##]"을 사용하여 멤버 이름 대신 DispID를 지정할 수 있습니다. 예를 들어 MyComMethod의 DispID가 3인 경우 "MyComMethod" 대신 "[DispID=3]" 문자열을 지정할 수 있습니다. DispID로 멤버를 호출하는 것은 이름으로 멤버를 조회하는 것보다 빠릅니다. 복잡한 집계 시나리오에서 DispID는 경우에 따라 원하는 멤버를 호출하는 유일한 방법입니다.
참고
.NET Framework 2.0 서비스 팩 1부터 이 메서드를 사용하여 호출자에게 플래그가 ReflectionPermissionFlag.RestrictedMemberAccess 부여된 ReflectionPermission 경우 및 비공용 멤버의 권한 부여 집합이 호출자의 권한 부여 집합 또는 해당 하위 집합으로 제한되는 경우 비공용 멤버에 액세스할 수 있습니다. ( 리플렉션에 대한 보안 고려 사항을 참조하세요.)
이 기능을 사용하려면 애플리케이션이 .NET Framework 3.5 이상을 대상으로 해야 합니다.
추가 정보
- String
- Binder
- DefaultBinder
- BindingFlags
- ParameterModifier
- ParameterAttributes
- CultureInfo
- ReflectionPermission
적용 대상
InvokeMember(String, BindingFlags, Binder, Object, Object[], CultureInfo)
- Source:
- Type.cs
- Source:
- Type.cs
- Source:
- Type.cs
지정된 바인딩 제약 조건과 지정된 인수 목록 및 문화권을 사용하여 지정된 멤버를 호출합니다.
public:
System::Object ^ InvokeMember(System::String ^ name, System::Reflection::BindingFlags invokeAttr, System::Reflection::Binder ^ binder, System::Object ^ target, cli::array <System::Object ^> ^ args, System::Globalization::CultureInfo ^ culture);
public:
virtual System::Object ^ InvokeMember(System::String ^ name, System::Reflection::BindingFlags invokeAttr, System::Reflection::Binder ^ binder, System::Object ^ target, cli::array <System::Object ^> ^ args, System::Globalization::CultureInfo ^ culture);
public object? InvokeMember (string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder? binder, object? target, object?[]? args, System.Globalization.CultureInfo? culture);
public object InvokeMember (string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, object target, object[] args, System.Globalization.CultureInfo culture);
member this.InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Globalization.CultureInfo -> obj
abstract member InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Globalization.CultureInfo -> obj
override this.InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Globalization.CultureInfo -> obj
Public Function InvokeMember (name As String, invokeAttr As BindingFlags, binder As Binder, target As Object, args As Object(), culture As CultureInfo) As Object
매개 변수
- name
- String
호출할 생성자, 메서드, 속성 또는 필드 멤버의 이름이 포함된 문자열입니다.
또는
기본 멤버를 호출하는 빈 문자열("")입니다.
또는
IDispatch
멤버의 경우 DispID를 나타내는 문자열(예: "[DispID=3]")입니다.
- invokeAttr
- BindingFlags
검색 방법을 지정하는 열거형 값의 비트 조합입니다. 액세스 권한은 BindingFlags
, Public
, NonPublic
, Private
, InvokeMethod
등과 같은 GetField
중 하나가 될 수 있습니다. 조회 형식을 지정할 필요가 없습니다. 조회 형식을 생략하면 BindingFlags.Public
| BindingFlags.Instance
| BindingFlags.Static
이 사용됩니다.
- binder
- Binder
속성 집합을 정의하고 바인딩을 활성화하는 개체입니다. 이 개체는 또한 리플렉션을 통해 오버로드된 메서드를 선택할 수 있고 인수 형식을 강제 변환할 수 있으며 멤버를 호출할 수도 있습니다.
또는
Nothing
를 사용하려면 null 참조(Visual Basic의 경우 DefaultBinder)입니다. 변수 인수를 사용하여 메서드 오버로드를 호출하려면 Binder 개체를 명시적으로 정의해야 할 수도 있습니다.
- target
- Object
지정한 멤버를 호출할 개체입니다.
- args
- Object[]
호출할 멤버에 전달하는 인수를 포함하는 배열입니다.
- culture
- CultureInfo
사용할 전역화 로캘을 나타내는 개체입니다. 이 개체는 숫자 String을 Double로 변환하는 등의 로캘별 변환에 사용할 수 있습니다.
또는
현재 스레드의 Nothing
를 사용하려면 null 참조(Visual Basic의 경우 CultureInfo)입니다.
반환
호출된 멤버의 반환 값을 나타내는 개체입니다.
구현
예외
invokeAttr
에 CreateInstance
가 포함되어 있지 않으며 name
이 null
입니다.
invokeAttr
이 올바른 BindingFlags 특성이 아닙니다.
또는
invokeAttr
에 InvokeMethod
, CreateInstance
, GetField
, SetField
, GetProperty
또는 SetProperty
바인딩 플래그 중 하나가 포함되어 있지 않습니다.
또는
invokeAttr
에 CreateInstance
, InvokeMethod
, GetField
, SetField
또는 GetProperty
와 결합된 SetProperty
가 포함되어 있습니다.
또는
invokeAttr
에 GetField
와 SetField
가 둘 다 포함되어 있습니다.
또는
invokeAttr
에 GetProperty
와 SetProperty
가 둘 다 포함되어 있습니다.
또는
invokeAttr
에 InvokeMethod
또는 SetField
와 결합된 SetProperty
가 포함되어 있습니다.
또는
invokeAttr
에 SetField
가 포함되어 있으며 args
에 둘 이상의 요소가 있습니다.
또는
이 메서드가 COM 개체에 대해 호출되고 다음 바인딩 플래그 중 하나가 BindingFlags.InvokeMethod
, BindingFlags.GetProperty
, BindingFlags.SetProperty
, BindingFlags.PutDispProperty
또는 BindingFlags.PutRefDispProperty
로 전달되지 않았습니다.
또는
명명된 매개 변수 배열 중 하나에 null
인 문자열이 포함되어 있습니다.
지정된 멤버가 클래스 이니셜라이저입니다.
필드 또는 속성을 찾을 수 없습니다.
args
의 인수와 일치하는 메서드를 찾을 수 없습니다.
또는
현재 Type 개체가 개방형 매개 변수를 포함하는 형식, 즉, ContainsGenericParameters가 true
를 반환하는 형식을 나타냅니다.
지정된 멤버를 target
에 대해 호출할 수 없습니다.
두 개 이상의 메서드가 바인딩 기준과 일치합니다.
name
이 나타내는 메서드에 두 개 이상의 제네릭 형식 매개 변수가 지정되지 않았습니다. 즉, 메서드의 ContainsGenericParameters 속성이 true
를 반환합니다.
설명
기본 바인더는 (매개 변수)를 처리 CultureInfo 하지 않지만 추상 System.Reflection.Binder 클래스를 사용하여 를 처리하는 culture
사용자 지정 바인더를 작성할 수 culture
있습니다.
참고
를 사용하여 InvokeMember 제네릭 메서드를 호출할 수 없습니다.
다음 BindingFlags 필터 플래그를 사용하여 검색에 포함할 멤버를 정의할 수 있습니다.
검색에 공용 멤버를 포함하도록 지정
BindingFlags.Public
합니다.비공용 멤버(즉, 프라이빗, 내부 및 보호된 멤버)를 검색에 포함하도록 지정
BindingFlags.NonPublic
합니다.계층 구조에 정적 멤버를 포함하도록 지정
BindingFlags.FlattenHierarchy
합니다.
다음 BindingFlags 한정자 플래그를 사용하여 검색 작동 방식을 변경할 수 있습니다.
BindingFlags.IgnoreCase
의name
대/소문자를 무시합니다.BindingFlags.DeclaredOnly
에 선언된 Type멤버만 검색하려면 단순히 상속된 멤버가 아닙니다.
다음 BindingFlags 호출 플래그를 사용하여 멤버로 수행할 작업을 나타낼 수 있습니다.
CreateInstance
생성자를 호출합니다.name
는 무시됩니다. 다른 호출 플래그에서는 유효하지 않습니다.InvokeMethod
메서드를 호출하지만 생성자 또는 형식 이니셜라이저는 호출하지 않습니다. 또는SetProperty
에서SetField
유효하지 않습니다. 가 자체적으로 지정된 경우InvokeMethod
,BindingFlags.Public
BindingFlags.Instance
및BindingFlags.Static
가 자동으로 포함됩니다.GetField
필드의 값을 가져옵니다. 에서SetField
유효하지 않습니다.SetField
필드 값을 설정하려면 입니다. 에서GetField
유효하지 않습니다.GetProperty
속성을 가져옵니다. 에서SetProperty
유효하지 않습니다.SetProperty
속성을 설정하려면 입니다. 에서GetProperty
유효하지 않습니다.
자세한 내용은 System.Reflection.BindingFlags를 참조하세요.
다음 두 조건이 모두 true인 경우 메서드가 호출됩니다.
메서드 선언의 매개 변수 수는 배열의 인수 수와 같습니다(기본 인수
args
가 멤버에 정의되고BindingFlags.OptionalParamBinding
지정되지 않는 한).각 인수의 형식은 바인더가 매개 변수 형식으로 변환할 수 있습니다.
바인더는 일치하는 모든 메서드를 찾습니다. 이러한 메서드는 요청된 바인딩 유형(값 InvokeMethod
,BindingFlagsGetProperty
등)을 기반으로 합니다. 메서드 집합은 이름, 인수 수 및 바인더에 정의된 검색 한정자 집합으로 필터링됩니다.
메서드를 선택한 후에는 메서드가 호출됩니다. 접근성은 해당 시점에서 확인됩니다. 검색은 메서드와 연결된 접근성 특성에 따라 검색되는 메서드 집합을 제어할 수 있습니다. Binder.BindToMethod 클래스의 Binder 메서드는 호출할 메서드를 선택해야 합니다. 기본 바인더는 가장 구체적인 일치 항목을 선택합니다.
액세스 제한은 완전히 신뢰할 수 있는 코드에 대해 무시됩니다. 즉, 코드를 완전히 신뢰할 때마다 리플렉션을 통해 프라이빗 생성자, 메서드, 필드 및 속성에 액세스하고 호출할 수 있습니다.
를 사용하여 Type.InvokeMember
을 지정하여 필드를 특정 값으로 설정할 수 있습니다 BindingFlags.SetField. 예를 들어 C 클래스에서 F라는 공용 instance 필드를 설정하려는 경우 F는 String
다음과 같은 코드를 사용할 수 있습니다.
typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {"strings new value"}, null);
F가 인 String[]
경우 다음과 같은 코드를 사용할 수 있습니다.
typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {new String[]{"a","z","c","d"}}, null);
필드 F를 이 새 배열로 초기화합니다. 다음과 같은 코드를 사용하여 값의 인덱스와 다음 값을 제공하여 배열의 위치를 설정하는 데 사용할 Type.InvokeMember
수도 있습니다.
typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {1, "b"}, null);
그러면 F가 보유하는 배열의 문자열 "z"가 문자열 "b"로 변경됩니다.
멤버를 IDispatch
호출할 때 문자열 형식 "[DispID=##]"을 사용하여 멤버 이름 대신 DispID를 지정할 수 있습니다. 예를 들어 MyComMethod의 DispID가 3인 경우 "MyComMethod" 대신 "[DispID=3]" 문자열을 지정할 수 있습니다. DispID로 멤버를 호출하는 것은 이름으로 멤버를 조회하는 것보다 빠릅니다. 복잡한 집계 시나리오에서 DispID는 경우에 따라 원하는 멤버를 호출하는 유일한 방법입니다.
참고
.NET Framework 2.0 서비스 팩 1부터 이 메서드는 호출자가 플래그를 ReflectionPermissionFlag.RestrictedMemberAccess 사용하여 부여된 ReflectionPermission 경우 및 비공용 멤버의 권한 부여 집합이 호출자의 권한 부여 집합 또는 해당 하위 집합으로 제한되는 경우 비공용 멤버에 액세스하는 데 사용할 수 있습니다. ( 리플렉션에 대한 보안 고려 사항을 참조하세요.)
이 기능을 사용하려면 애플리케이션이 .NET Framework 3.5 이상을 대상으로 해야 합니다.
추가 정보
- String
- Binder
- DefaultBinder
- BindingFlags
- ParameterModifier
- ParameterAttributes
- CultureInfo
- ReflectionPermission
적용 대상
InvokeMember(String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[])
- Source:
- Type.cs
- Source:
- Type.cs
- Source:
- Type.cs
파생 클래스에서 재정의되면, 지정된 바인딩 제약 조건과 지정된 인수 목록, 한정자 및 문화권을 사용하여 지정된 멤버를 호출합니다.
public:
abstract System::Object ^ InvokeMember(System::String ^ name, System::Reflection::BindingFlags invokeAttr, System::Reflection::Binder ^ binder, System::Object ^ target, cli::array <System::Object ^> ^ args, cli::array <System::Reflection::ParameterModifier> ^ modifiers, System::Globalization::CultureInfo ^ culture, cli::array <System::String ^> ^ namedParameters);
public abstract object? InvokeMember (string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder? binder, object? target, object?[]? args, System.Reflection.ParameterModifier[]? modifiers, System.Globalization.CultureInfo? culture, string[]? namedParameters);
public abstract object InvokeMember (string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, object target, object[] args, System.Reflection.ParameterModifier[] modifiers, System.Globalization.CultureInfo culture, string[] namedParameters);
abstract member InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Reflection.ParameterModifier[] * System.Globalization.CultureInfo * string[] -> obj
Public MustOverride Function InvokeMember (name As String, invokeAttr As BindingFlags, binder As Binder, target As Object, args As Object(), modifiers As ParameterModifier(), culture As CultureInfo, namedParameters As String()) As Object
매개 변수
- name
- String
호출할 생성자, 메서드, 속성 또는 필드 멤버의 이름이 포함된 문자열입니다.
또는
기본 멤버를 호출하는 빈 문자열("")입니다.
또는
IDispatch
멤버의 경우 DispID를 나타내는 문자열(예: "[DispID=3]")입니다.
- invokeAttr
- BindingFlags
검색 방법을 지정하는 열거형 값의 비트 조합입니다. 액세스 권한은 BindingFlags
, Public
, NonPublic
, Private
, InvokeMethod
등과 같은 GetField
중 하나가 될 수 있습니다. 조회 형식을 지정할 필요가 없습니다. 조회 형식을 생략하면 BindingFlags.Public
| BindingFlags.Instance
| BindingFlags.Static
이 사용됩니다.
- binder
- Binder
속성 집합을 정의하고 바인딩을 활성화하는 개체입니다. 이 개체는 또한 리플렉션을 통해 오버로드된 메서드를 선택할 수 있고 인수 형식을 강제 변환할 수 있으며 멤버를 호출할 수도 있습니다.
또는
DefaultBinder를 사용할 null 참조(Visual Basic에는 없음)입니다. 변수 인수를 사용하여 메서드 오버로드를 호출하려면 Binder 개체를 명시적으로 정의해야 할 수도 있습니다.
- target
- Object
지정한 멤버를 호출할 개체입니다.
- args
- Object[]
호출할 멤버에 전달하는 인수를 포함하는 배열입니다.
- modifiers
- ParameterModifier[]
ParameterModifier 배열에서 해당하는 요소와 연관된 특성을 나타내는 args
개체 배열입니다. 매개 변수의 관련 특성은 해당 멤버의 시그니처에 저장됩니다.
기본 바인더는 COM 구성 요소를 호출하는 경우에만 이 매개 변수를 처리합니다.
- culture
- CultureInfo
사용할 전역화 로캘을 나타내는 CultureInfo 개체입니다. 이 개체는 숫자 String을 Double로 변환하는 등의 로캘 관련 변환에 사용할 수 있습니다.
또는
현재 스레드의 Nothing
를 사용하려면 null 참조(Visual Basic의 경우 CultureInfo)입니다.
- namedParameters
- String[]
args
배열의 값이 전달될 매개 변수의 이름이 있는 배열입니다.
반환
호출된 멤버의 반환 값을 나타내는 개체입니다.
구현
예외
invokeAttr
에 CreateInstance
가 포함되어 있지 않으며 name
이 null
입니다.
args
와 modifiers
의 길이가 동일하지 않습니다.
또는
invokeAttr
이 올바른 BindingFlags 특성이 아닙니다.
또는
invokeAttr
에 InvokeMethod
, CreateInstance
, GetField
, SetField
, GetProperty
또는 SetProperty
바인딩 플래그 중 하나가 포함되어 있지 않습니다.
또는
invokeAttr
에 CreateInstance
, InvokeMethod
, GetField
, SetField
또는 GetProperty
와 결합된 SetProperty
가 포함되어 있습니다.
또는
invokeAttr
에 GetField
와 SetField
가 둘 다 포함되어 있습니다.
또는
invokeAttr
에 GetProperty
와 SetProperty
가 둘 다 포함되어 있습니다.
또는
invokeAttr
에 InvokeMethod
또는 SetField
와 결합된 SetProperty
가 포함되어 있습니다.
또는
invokeAttr
에 SetField
가 포함되어 있으며 args
에 둘 이상의 요소가 있습니다.
또는
명명된 매개 변수 배열이 인수 배열보다 큽니다.
또는
이 메서드가 COM 개체에 대해 호출되고 다음 바인딩 플래그 중 하나가 BindingFlags.InvokeMethod
, BindingFlags.GetProperty
, BindingFlags.SetProperty
, BindingFlags.PutDispProperty
또는 BindingFlags.PutRefDispProperty
로 전달되지 않았습니다.
또는
명명된 매개 변수 배열 중 하나에 null
인 문자열이 포함되어 있습니다.
지정된 멤버가 클래스 이니셜라이저입니다.
필드 또는 속성을 찾을 수 없습니다.
args
의 인수와 일치하는 메서드를 찾을 수 없습니다.
또는
인수 이름이 제공된 멤버를 namedParameters
에서 찾을 수 없습니다.
또는
현재 Type 개체가 개방형 매개 변수를 포함하는 형식, 즉, ContainsGenericParameters가 true
를 반환하는 형식을 나타냅니다.
지정된 멤버를 target
에 대해 호출할 수 없습니다.
두 개 이상의 메서드가 바인딩 기준과 일치합니다.
name
이 나타내는 메서드에 두 개 이상의 제네릭 형식 매개 변수가 지정되지 않았습니다. 즉, 메서드의 ContainsGenericParameters 속성이 true
를 반환합니다.
설명
InvokeMember
는 생성자 멤버 또는 메서드 멤버를 호출하거나, 속성 멤버를 가져오거나 설정하거나, 데이터 필드 멤버를 가져오거나 설정하거나, 배열 멤버의 요소를 가져오거나 설정합니다.
참고
를 사용하여 InvokeMember 제네릭 메서드를 호출할 수 없습니다.
멤버를 IDispatch
호출할 때 문자열 형식 "[DispID=##]"을 사용하여 멤버 이름 대신 DispID를 지정할 수 있습니다. 예를 들어 MyComMethod의 DispID가 3이면 "MyComMethod" 대신 "[DispID=3]" 문자열을 지정할 수 있습니다. DispID로 멤버를 호출하는 것은 이름으로 멤버를 조회하는 것보다 빠릅니다. 복잡한 집계 시나리오에서 DispID가 원하는 멤버를 호출하는 유일한 방법인 경우도 있습니다.
기본 바인더는 또는 (및 매개 변수)를 처리 ParameterModifier 하지 않지만 추상 System.Reflection.Binder 클래스를 사용하여 및 culture
를 처리하는 modifiers
사용자 지정 바인더를 작성할 수 있습니다.culture
modifiers
CultureInfo
ParameterModifier
는 COM interop을 통해 호출할 때만 사용되며 참조로 전달되는 매개 변수만 처리됩니다.
namedParameters
배열의 각 매개 변수는 args
배열의 해당 요소에 있는 값을 가져옵니다.
args
의 길이가 namedParameters
의 길이보다 크면 남은 인수 값이 순서대로 전달됩니다.
배열을 namedParameters
사용하여 입력 배열의 인수 순서를 변경할 수 있습니다. 예를 들어 메서드 M(string a, int b)
(M(ByVal a As String, ByVal b As Integer)
Visual Basic의 경우)와 입력 배열{ 42, "x" }
이 지정된 경우 에 배열이 제공namedParameters
되면 입력 배열 { "b", "a" }
을 에 변경되지 args
않고 전달할 수 있습니다.
다음 BindingFlags 필터 플래그를 사용하여 검색에 포함할 멤버를 정의할 수 있습니다.
검색에 공용 멤버를 포함하도록 지정
BindingFlags.Public
합니다.비공용 멤버(즉, 프라이빗, 내부 및 보호된 멤버)를 검색에 포함하도록 지정
BindingFlags.NonPublic
합니다.계층 구조에 정적 멤버를 포함하도록 지정
BindingFlags.FlattenHierarchy
합니다.
다음 BindingFlags 한정자 플래그를 사용하여 검색 작동 방식을 변경할 수 있습니다.
BindingFlags.IgnoreCase
의name
대/소문자를 무시합니다.BindingFlags.DeclaredOnly
에 선언된 Type멤버만 검색하려면 이고, 단순히 상속된 멤버는 검색하지 않습니다.
다음 BindingFlags 호출 플래그를 사용하여 멤버와 함께 수행할 작업을 나타낼 수 있습니다.
CreateInstance
생성자를 호출합니다.name
는 무시됩니다. 다른 호출 플래그에서는 유효하지 않습니다.InvokeMethod
는 메서드를 호출하지만 생성자 또는 형식 이니셜라이저는 호출하지 않습니다. 또는SetProperty
에서SetField
유효하지 않습니다. 가InvokeMethod
자체적으로 지정되면 ,BindingFlags.Public
BindingFlags.Instance
및BindingFlags.Static
가 자동으로 포함됩니다.GetField
필드의 값을 가져옵니다. 에서SetField
유효하지 않습니다.SetField
필드의 값을 설정하려면 입니다. 에서GetField
유효하지 않습니다.GetProperty
속성을 가져옵니다. 에서SetProperty
유효하지 않습니다.SetProperty
속성을 설정하려면 입니다. 에서GetProperty
유효하지 않습니다.
자세한 내용은 System.Reflection.BindingFlags를 참조하세요.
다음 조건이 모두 true이면 메서드가 호출됩니다.
메서드 선언의 매개 변수 수는 배열의 인수 수와
BindingFlags.OptionalParamBinding
같습니다(기본 인수args
가 멤버에 정의되고 지정되지 않은 경우).각 인수의 형식은 바인더에서 매개 변수 형식으로 변환할 수 있습니다.
바인더는 일치하는 모든 메서드를 찾습니다. 이러한 메서드는 요청된 바인딩 유형(BindingFlags 값 InvokeMethod
, GetProperty
등)을 기반으로 찾을 수 있습니다. 메서드 집합은 이름, 인수 수 및 바인더에 정의된 검색 한정자 집합으로 필터링됩니다.
메서드를 선택한 후에는 메서드가 호출됩니다. 해당 시점에서 접근성을 확인합니다. 검색은 메서드와 연결된 접근성 특성에 따라 검색되는 메서드 집합을 제어할 수 있습니다. Binder.BindToMethod 클래스의 Binder 메서드는 호출할 메서드를 선택해야 합니다. 기본 바인더는 가장 구체적인 일치 항목을 선택합니다.
InvokeMember
는 기본값이 있는 매개 변수를 사용하여 메서드를 호출하는 데 사용할 수 있습니다. 이러한 메서드에 바인딩하려면 리플렉션을 BindingFlags.OptionalParamBinding 지정해야 합니다. 기본값이 있는 매개 변수의 경우 다른 값을 제공하거나 기본값을 사용하도록 를 제공할 Missing.Value 수 있습니다.
예를 들어 MyMethod(int x, float y = 2.0)와 같은 메서드를 고려합니다. 첫 번째 인수만 MyMethod(4)로 사용하여 이 메서드를 호출하려면 위의 바인딩 플래그 중 하나를 전달하고 두 개의 인수(즉, 첫 번째 인수에 대해 4) 및 Missing.Value
두 번째 인수를 전달합니다. 를 사용하지 Missing.Value
않는 한 메서드를 사용하여 선택적 매개 변수를 Invoke
생략하지 않을 수 있습니다. 이렇게 해야 하는 경우 대신 를 사용합니다 InvokeMember
.
액세스 제한은 완전히 신뢰할 수 있는 코드에 대해 무시됩니다. 즉, 코드를 완전히 신뢰할 때마다 프라이빗 생성자, 메서드, 필드 및 속성에 액세스하고 호출 System.Reflection 할 수 있습니다.
를 사용하여 Type.InvokeMember
을 지정하여 필드를 특정 값으로 설정할 수 있습니다 BindingFlags.SetField. 예를 들어 C 클래스에서 F라는 공용 instance 필드를 설정하고 F가 String
인 경우 다음과 같은 코드를 사용할 수 있습니다.
typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {"strings new value"}, null, null, null);
F가 인 String[]
경우 다음과 같은 코드를 사용할 수 있습니다.
typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {new String[]{"a","z","c","d"}}, null, null, null);
필드 F를 이 새 배열로 초기화합니다. 를 사용하여 Type.InvokeMember
값의 인덱스 및 다음 값(예: 코드)을 제공하여 배열의 위치를 설정할 수도 있습니다.
typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {1, "b"}, null, null, null);
그러면 F가 보유하는 배열의 문자열 "z"가 문자열 "b"로 변경됩니다.
참고
.NET Framework 2.0 서비스 팩 1부터 이 메서드는 호출자가 플래그를 ReflectionPermissionFlag.RestrictedMemberAccess 사용하여 부여된 ReflectionPermission 경우 및 비공용 멤버의 권한 부여 집합이 호출자의 권한 부여 집합 또는 해당 하위 집합으로 제한되는 경우 비공용 멤버에 액세스하는 데 사용할 수 있습니다. ( 리플렉션에 대한 보안 고려 사항을 참조하세요.)
이 기능을 사용하려면 애플리케이션이 .NET Framework 3.5 이상을 대상으로 해야 합니다.
추가 정보
- String
- Binder
- DefaultBinder
- BindingFlags
- ParameterModifier
- ParameterAttributes
- CultureInfo
- ReflectionPermission
적용 대상
.NET