Type.InvokeMember Type.InvokeMember Type.InvokeMember Method

정의

현재 Type의 특정 멤버를 호출합니다.Invokes a specific member of the current Type.

오버로드

InvokeMember(String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[]) InvokeMember(String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[]) InvokeMember(String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[])

파생 클래스에서 재정의되면, 지정된 바인딩 제약 조건과 지정된 인수 목록, 한정자 및 문화권을 사용하여 지정된 멤버를 호출합니다.When overridden in a derived class, invokes the specified member, using the specified binding constraints and matching the specified argument list, modifiers and culture.

InvokeMember(String, BindingFlags, Binder, Object, Object[]) InvokeMember(String, BindingFlags, Binder, Object, Object[]) InvokeMember(String, BindingFlags, Binder, Object, Object[])

지정된 바인딩 제약 조건과 인수 목록을 사용하여 지정된 멤버를 호출합니다.Invokes the specified member, using the specified binding constraints and matching the specified argument list.

InvokeMember(String, BindingFlags, Binder, Object, Object[], CultureInfo) InvokeMember(String, BindingFlags, Binder, Object, Object[], CultureInfo) InvokeMember(String, BindingFlags, Binder, Object, Object[], CultureInfo)

지정된 바인딩 제약 조건과 지정된 인수 목록 및 문화권을 사용하여 지정된 멤버를 호출합니다.Invokes the specified member, using the specified binding constraints and matching the specified argument list and culture.

InvokeMember(String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[]) InvokeMember(String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[]) InvokeMember(String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[])

파생 클래스에서 재정의되면, 지정된 바인딩 제약 조건과 지정된 인수 목록, 한정자 및 문화권을 사용하여 지정된 멤버를 호출합니다.When overridden in a derived class, invokes the specified member, using the specified binding constraints and matching the specified argument list, modifiers and culture.

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);
abstract member InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Reflection.ParameterModifier[] * System.Globalization.CultureInfo * string[] -> obj

매개 변수

name
String String String

호출할 생성자, 메서드, 속성 또는 필드 멤버의 이름이 포함된 문자열입니다.The string containing the name of the constructor, method, property, or field member to invoke.

또는-or- 기본 멤버를 호출하는 빈 문자열("")입니다.An empty string ("") to invoke the default member.

또는-or- IDispatch 멤버의 경우 DispID를 나타내는 문자열(예: "[DispID=3]")입니다.For IDispatch members, a string representing the DispID, for example "[DispID=3]".

invokeAttr
BindingFlags BindingFlags BindingFlags

검색 방법을 지정하는 열거형 값의 비트 조합입니다.A bitwise combination of the enumeration values that specify how the search is conducted. 액세스 권한은 BindingFlags, Public, NonPublic, Private, InvokeMethod 등과 같은 GetField 중 하나가 될 수 있습니다.The access can be one of the BindingFlags such as Public, NonPublic, Private, InvokeMethod, GetField, and so on. 조회 형식을 지정할 필요가 없습니다.The type of lookup need not be specified. 조회 형식을 생략하면 BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static이 사용됩니다.If the type of lookup is omitted, BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static are used.

binder
Binder Binder Binder

속성 집합을 정의하고 바인딩을 활성화하는 개체입니다. 이 개체는 또한 리플렉션을 통해 오버로드된 메서드를 선택할 수 있고 인수 형식을 강제 변환할 수 있으며 멤버를 호출할 수도 있습니다.An object that defines a set of properties and enables binding, which can involve selection of an overloaded method, coercion of argument types, and invocation of a member through reflection.

또는-or- DefaultBinder를 사용할 null 참조(Visual Basic에는 없음)입니다.A null reference (Nothing in Visual Basic), to use the DefaultBinder. 변수 인수를 사용하여 메서드 오버로드를 호출하려면 Binder 개체를 명시적으로 정의해야 할 수도 있습니다.Note that explicitly defining a Binder object may be required for successfully invoking method overloads with variable arguments.

target
Object Object Object

지정한 멤버를 호출할 개체입니다.The object on which to invoke the specified member.

args
Object[]

호출할 멤버에 전달하는 인수를 포함하는 배열입니다.An array containing the arguments to pass to the member to invoke.

modifiers
ParameterModifier[]

ParameterModifier 배열에서 해당하는 요소와 연관된 특성을 나타내는 args 개체 배열입니다.An array of ParameterModifier objects representing the attributes associated with the corresponding element in the args array. 매개 변수의 관련 특성은 해당 멤버의 시그니처에 저장됩니다.A parameter's associated attributes are stored in the member's signature.

기본 바인더는 COM 구성 요소를 호출하는 경우에만 이 매개 변수를 처리합니다.The default binder processes this parameter only when calling a COM component.

culture
CultureInfo CultureInfo CultureInfo

사용할 전역화 로캘을 나타내는 CultureInfo 개체입니다. 이 개체는 숫자 String을 Double로 변환하는 등의 로캘 관련 변환에 사용할 수 있습니다.The CultureInfo object representing the globalization locale to use, which may be necessary for locale-specific conversions, such as converting a numeric String to a Double.

또는-or- 현재 스레드의 Nothing를 사용하려면 null 참조(Visual Basic의 경우 CultureInfo)입니다.A null reference (Nothing in Visual Basic) to use the current thread's CultureInfo.

namedParameters
String[]

args 배열의 값이 전달될 매개 변수의 이름이 있는 배열입니다.An array containing the names of the parameters to which the values in the args array are passed.

반환

호출된 멤버의 반환 값을 나타내는 개체입니다.An object representing the return value of the invoked member.

구현

예외

invokeAttrCreateInstance가 포함되어 있지 않으며 namenull입니다.invokeAttr does not contain CreateInstance and name is null.

argsmodifiers의 길이가 동일하지 않습니다.args and modifiers do not have the same length.

또는-or- invokeAttr 이 올바른 BindingFlags 특성이 아닙니다.invokeAttr is not a valid BindingFlags attribute.

또는-or- invokeAttrInvokeMethod, CreateInstance, GetField, SetField, GetProperty 또는 SetProperty 바인딩 플래그 중 하나가 포함되어 있지 않습니다.invokeAttr does not contain one of the following binding flags: InvokeMethod, CreateInstance, GetField, SetField, GetProperty, or SetProperty.

또는-or- invokeAttrInvokeMethod, GetField, SetField, GetProperty 또는 SetProperty와 결합된 CreateInstance가 포함되어 있습니다.invokeAttr contains CreateInstance combined with InvokeMethod, GetField, SetField, GetProperty, or SetProperty.

또는-or- invokeAttrGetFieldSetField가 둘 다 포함되어 있습니다.invokeAttr contains both GetField and SetField.

또는-or- invokeAttrGetPropertySetProperty가 둘 다 포함되어 있습니다.invokeAttr contains both GetProperty and SetProperty.

또는-or- invokeAttrSetField 또는 SetProperty와 결합된 InvokeMethod가 포함되어 있습니다.invokeAttr contains InvokeMethod combined with SetField or SetProperty.

또는-or- invokeAttrSetField가 포함되어 있으며 args에 둘 이상의 요소가 있습니다.invokeAttr contains SetField and args has more than one element.

또는-or- 명명된 매개 변수 배열이 인수 배열보다 큽니다.The named parameter array is larger than the argument array.

또는-or- 이 메서드가 COM 개체에 대해 호출되고 다음 바인딩 플래그 중 하나가 BindingFlags.InvokeMethod, BindingFlags.GetProperty, BindingFlags.SetProperty, BindingFlags.PutDispProperty 또는 BindingFlags.PutRefDispProperty로 전달되지 않았습니다.This method is called on a COM object and one of the following binding flags was not passed in: BindingFlags.InvokeMethod, BindingFlags.GetProperty, BindingFlags.SetProperty, BindingFlags.PutDispProperty, or BindingFlags.PutRefDispProperty.

또는-or- 명명된 매개 변수 배열 중 하나에 null인 문자열이 포함되어 있습니다.One of the named parameter arrays contains a string that is null.

지정된 멤버가 클래스 이니셜라이저입니다.The specified member is a class initializer.

필드 또는 속성을 찾을 수 없습니다.The field or property cannot be found.

args의 인수와 일치하는 메서드를 찾을 수 없습니다.No method can be found that matches the arguments in args.

또는-or- 인수 이름이 제공된 멤버를 namedParameters에서 찾을 수 없습니다.No member can be found that has the argument names supplied in namedParameters.

또는-or- 현재 Type 개체가 개방형 매개 변수를 포함하는 형식, 즉, ContainsGenericParameterstrue를 반환하는 형식을 나타냅니다.The current Type object represents a type that contains open type parameters, that is, ContainsGenericParameters returns true.

지정된 멤버를 target에 대해 호출할 수 없습니다.The specified member cannot be invoked on target.

두 개 이상의 메서드가 바인딩 기준과 일치합니다.More than one method matches the binding criteria.

name이 나타내는 메서드에 두 개 이상의 제네릭 형식 매개 변수가 지정되지 않았습니다.The method represented by name has one or more unspecified generic type parameters. 즉, 메서드의 ContainsGenericParameters 속성이 true를 반환합니다.That is, the method's ContainsGenericParameters property returns true.

설명

InvokeMember 생성자 멤버 또는 메서드 멤버를 호출, 가져옵니다 또는 속성 멤버를 설정, 또는 데이터 필드 멤버, 집합 또는 가져옵니다 가져오거나 배열 멤버의 요소.InvokeMember calls a constructor member or a method member, gets or sets a property member, gets or sets a data field member, or gets or sets an element of an array member.

참고

사용할 수 없습니다 InvokeMember 제네릭 메서드를 호출 합니다.You cannot use InvokeMember to invoke a generic method.

호출 하는 경우는 IDispatch 멤버의 경우 DispID 멤버 이름 대신 문자열 형식을 사용 하 여 지정할 수 있습니다 "[DispID = # #]"입니다.When you invoke an IDispatch member you can specify the DispID instead of the member name, using the string format "[DispID=##]". 예를 들어 MyComMethod dispid가 3 인 경우 문자열을 지정할 수 "[DispID = 3]" 대신 "MyComMethod"입니다.For example, if the DispID of MyComMethod is 3, you can specify the string "[DispID=3]" instead of "MyComMethod". DispID로 멤버를 호출 하는 것은 멤버 이름으로 조회 보다 빠릅니다.Invoking a member by DispID is faster than looking up the member by name. 복잡 한 집계 시나리오의 경우 DispID의 경우에 따라 원하는 멤버를 호출 하는 유일한 방법은 합니다.In complex aggregation scenarios, the DispID is sometimes the only way to invoke the desired member.

기본 바인더를 처리 하지 않습니다 하지만 ParameterModifier 또는 CultureInfo (합니다 modifiersculture 매개 변수), 추상을 사용할 수 있습니다 System.Reflection.Binder 클래스에서 처리 하는 사용자 지정 바인더를 작성할 modifiersculture.Although the default binder does not process ParameterModifier or CultureInfo (the modifiers and culture parameters), you can use the abstract System.Reflection.Binder class to write a custom binder that does process modifiers and culture. ParameterModifier COM interop를 통해 호출 하는 경우에 사용 되는 참조로 전달 되는 매개 변수만 처리 됩니다.ParameterModifier is only used when calling through COM interop, and only parameters that are passed by reference are handled.

namedParameters 배열의 각 매개 변수는 args 배열의 해당 요소에 있는 값을 가져옵니다.Each parameter in the namedParameters array gets the value in the corresponding element in the args array. args의 길이가 namedParameters의 길이보다 크면 남은 인수 값이 순서대로 전달됩니다.If the length of args is greater than the length of namedParameters, the remaining argument values are passed in order.

namedParameters 배열 입력 배열의 인수 순서를 변경 하려면 사용할 수 있습니다.The namedParameters array can be used to change the order of arguments in an input array. 예를 들어 메서드를 제공 M(string a, int b) (M(ByVal a As String, ByVal b As Integer) Visual Basic의) 및 입력된 배열의 { 42, "x" }, 입력된 배열이 변경 되지 않고 전달 될 수 있습니다 args 경우 배열 { "b", "a" } 제공 되어 namedParameters.For example, given the method M(string a, int b) (M(ByVal a As String, ByVal b As Integer) in Visual Basic) and the input array { 42, "x" }, the input array can be passed unchanged to args if the array { "b", "a" } is supplied for namedParameters.

다음 BindingFlags 필터 플래그를 사용 하 여 검색에 포함할 멤버를 정의할 수 있습니다.The following BindingFlags filter flags can be used to define which members to include in the search:

  • 지정 BindingFlags.Public 검색에 public 멤버를 포함 합니다.Specify BindingFlags.Public to include public members in the search.

  • 지정 BindingFlags.NonPublic 검색에서 (즉,: private, internal 및 protected 멤버) public이 아닌 멤버를 포함 합니다.Specify BindingFlags.NonPublic to include non-public members (that is, private, internal, and protected members) in the search.

  • 지정 BindingFlags.FlattenHierarchy 계층 정적 멤버를 포함 합니다.Specify BindingFlags.FlattenHierarchy to include static members up the hierarchy.

다음 BindingFlags 한정자 플래그를 사용 하 여 검색의 작동 방식을 변경할 수 있습니다.The following BindingFlags modifier flags can be used to change how the search works:

  • BindingFlags.IgnoreCase 대/소문자를 무시 하려면 name합니다.BindingFlags.IgnoreCase to ignore the case of name.

  • BindingFlags.DeclaredOnly 에 선언 된 멤버만 검색 하 여 Type, 상속 된 멤버가 아닌 합니다.BindingFlags.DeclaredOnly to search only the members declared on the Type, not members that were simply inherited.

다음 BindingFlags 호출 플래그 멤버를 사용 하 여 수행할 작업을 나타내는 데 사용할 수 있습니다.The following BindingFlags invocation flags can be used to denote what action to take with the member:

  • CreateInstance 생성자를 호출 합니다.CreateInstance to invoke a constructor. name 무시 됩니다.name is ignored. 다른 호출 플래그를 사용 하 여 유효 하지 않습니다.Not valid with other invocation flags.

  • InvokeMethod 생성자 또는 형식 이니셜라이저가 없습니다 메서드를 하지만 호출 합니다.InvokeMethod to invoke a method, but not a constructor or a type initializer. 잘못 된 SetField 또는 SetProperty합니다.Not valid with SetField or SetProperty. 하는 경우 InvokeMethod 자체에 의해 지정 됩니다 BindingFlags.PublicBindingFlags.Instance, 및 BindingFlags.Static 자동으로 포함 됩니다.If InvokeMethod is specified by itself, BindingFlags.Public, BindingFlags.Instance, and BindingFlags.Static are automatically included.

  • GetField 에 필드의 값을 가져옵니다.GetField to get the value of a field. 잘못 된 SetField합니다.Not valid with SetField.

  • SetField 필드의 값을 설정 합니다.SetField to set the value of a field. 잘못 된 GetField합니다.Not valid with GetField.

  • GetProperty 속성을 가져오기 합니다.GetProperty to get a property. 잘못 된 SetProperty합니다.Not valid with SetProperty.

  • SetProperty 속성을 설정 합니다.SetProperty to set a property. 잘못 된 GetProperty합니다.Not valid with GetProperty.

자세한 내용은 System.Reflection.BindingFlags를 참조하세요.See System.Reflection.BindingFlags for more information.

메서드는 다음 조건이 모두 참인 경우 호출 됩니다.A method will be invoked if both of the following conditions are true:

  • 메서드 선언에서 매개 변수 수가 같음의 인수 개수는 args 배열 (기본 인수는 멤버에 정의 되지 않은 경우 및 BindingFlags.OptionalParamBinding 지정).The number of parameters in the method declaration equals the number of arguments in the args array (unless default arguments are defined on the member and BindingFlags.OptionalParamBinding is specified).

  • 매개 변수의 형식 바인더를 통해 각 인수의 형식을 변환할 수 있습니다.The type of each argument can be converted by the binder to the type of the parameter.

바인더 모든 일치 하는 메서드를 찾을 수 있습니다.The binder will find all of the matching methods. 요청 된 바인딩 형식에 따라 이러한 메서드를 찾습니다 (BindingFlagsInvokeMethod, GetProperty등).These methods are found based upon the type of binding requested (BindingFlags values InvokeMethod, GetProperty, and so on). 메서드의 집합 이름, 인수 개수를 및 바인더에서 정의 된 검색 한정자 집합으로 필터링 됩니다.The set of methods is filtered by the name, number of arguments, and a set of search modifiers defined in the binder.

메서드를 선택한 후 호출 됩니다.After the method is selected, it is invoked. 이때에 내게 필요한 옵션 확인 됩니다.Accessibility is checked at that point. 검색은 메서드를 사용 하 여 연결 된 내게 필요한 옵션 특성에 따라 검색할 메서드의 집합을 제어할 수 있습니다.The search may control which set of methods are searched based upon the accessibility attribute associated with the method. 합니다 Binder.BindToMethod 메서드를 Binder 클래스는 메서드를 호출할 수를 선택 하는 일을 담당 합니다.The Binder.BindToMethod method of the Binder class is responsible for selecting the method to be invoked. 기본 바인더를 가장 구체적으로 일치를 선택합니다.The default binder selects the most specific match.

InvokeMember 기본값이 있는 매개 변수를 사용 하 여 메서드를 호출할 수 있습니다.InvokeMember can be used to invoke methods with parameters that have default values. 이러한 메서드에 바인딩할 리플렉션 해야 BindingFlags.OptionalParamBinding 를 지정 해야 합니다.To bind to these methods, Reflection requires BindingFlags.OptionalParamBinding to be specified. 기본값이 있는 매개 변수에 다른 값을 제공 하거나 제공 Missing.Value 에 기본값을 사용 합니다.For a parameter that has a default value, you can either supply a different value, or supply Missing.Value to use the default value.

예를 들어 MyMethod와 같은 메서드 (int x, y float 2.0 =) 합니다.For example, consider a method such as MyMethod(int x, float y = 2.0). MyMethod(4)로 첫 번째 인수에만 사용 하 여이 메서드를 호출 하려면 위의 바인딩 플래그 중 하나를 전달 하 고 첫 번째 인수에 대 한 4 즉, 두 가지 인수를 전달 하 고 Missing.Value 두 번째 인수에 대 한 합니다.To invoke this method with only the first argument as MyMethod(4), pass one of the above binding flags and pass two arguments, namely, 4 for the first argument and Missing.Value for the second argument. 사용 하지 않는 경우 Missing.Value를 사용 하 여 선택적 매개 변수를 생략할 수 없습니다는 Invoke 메서드.Unless you use Missing.Value, you may not omit optional parameters with the Invoke method. 이렇게 해야 하는 경우 사용 하 여 InvokeMember 대신 합니다.If you must do so, use InvokeMember instead.

완전히 신뢰할 수 있는 코드에 대 한 액세스 제한이 무시 됩니다. 즉, 개인 생성자, 메서드, 필드 및 속성 액세스 하 고 수를 통해 호출 System.Reflection 때마다 코드는 완전히 신뢰할 수 있습니다.Access restrictions are ignored for fully trusted code; that is, private constructors, methods, fields, and properties can be accessed and invoked through System.Reflection whenever the code is fully trusted.

사용할 수 있습니다 Type.InvokeMember 필드를 지정 하 여 특정 값으로 설정 하려면 BindingFlags.SetField합니다.You can use Type.InvokeMember to set a field to a particular value by specifying BindingFlags.SetField. 예를 들어, 클래스 C F에 F 라는 공용 인스턴스 필드를 설정 하려는 경우는 String와 같은 코드를 사용할 수 있습니다.For example, if you want to set a public instance field named F on class C, and F is a String, you can use code such as:

typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {"strings new value"}, null, null, null);

F가는 String[]와 같은 코드를 사용할 수 있습니다.If F is a String[], you can use code such as:

typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {new String[]{"a","z","c","d"}}, null, null, null);

이 새 배열 F 필드가 초기화 됩니다.which will initialize the field F to this new array. 사용할 수도 있습니다 Type.InvokeMember 다음과 같은 코드를 사용 하 여 값 및 다음 값의 인덱스를 제공 하 여 배열에서 위치를 설정 하려면:You can also use Type.InvokeMember to set a position in an array by supplying the index of the value and then the next value by using code such as the following:

typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {1, "b"}, null, null, null);

이 문자열 "z" F "b" 문자열을 포함 하는 배열에서 변경 됩니다.This will change string "z" in the array that F holds to string "b".

참고

부터 합니다 .NET Framework 2.0 서비스 팩 1.NET Framework 2.0 Service Pack 1,이 메서드를 사용 하 여 호출자에 게 부여 된 경우 public이 아닌 멤버에 액세스할 수 있습니다 ReflectionPermission 사용 하 여는 ReflectionPermissionFlag.RestrictedMemberAccess 플래그 및 public이 아닌 멤버의 권한 부여 집합 호출자 에게만 부여 된 집합 또는 하위 집합 그 합니다.Starting with the .NET Framework 2.0 서비스 팩 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.

보안

ReflectionPermission
해당 권한 부여에 관계 없이 public이 아닌 멤버에 액세스 하기 위해 다음을 설정 합니다.for accessing non-public members regardless of their grant set. 연결 된 열거형: MemberAccessAssociated enumeration: MemberAccess

SecurityPermission
비관리 코드를 호출 합니다.to call unmanaged code. 연결 된 열거형: UnmanagedCodeAssociated enumeration: UnmanagedCode

추가 정보

InvokeMember(String, BindingFlags, Binder, Object, Object[]) InvokeMember(String, BindingFlags, Binder, Object, Object[]) InvokeMember(String, BindingFlags, Binder, Object, Object[])

지정된 바인딩 제약 조건과 인수 목록을 사용하여 지정된 멤버를 호출합니다.Invokes the specified member, using the specified binding constraints and matching the specified argument list.

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);
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

매개 변수

name
String String String

호출할 생성자, 메서드, 속성 또는 필드 멤버의 이름이 포함된 문자열입니다.The string containing the name of the constructor, method, property, or field member to invoke.

또는-or- 기본 멤버를 호출하는 빈 문자열("")입니다.An empty string ("") to invoke the default member.

또는-or- IDispatch 멤버의 경우 DispID를 나타내는 문자열(예: "[DispID=3]")입니다.For IDispatch members, a string representing the DispID, for example "[DispID=3]".

invokeAttr
BindingFlags BindingFlags BindingFlags

검색 방법을 지정하는 열거형 값의 비트 조합입니다.A bitwise combination of the enumeration values that specify how the search is conducted. 액세스 권한은 BindingFlags, Public, NonPublic, Private, InvokeMethod 등과 같은 GetField 중 하나가 될 수 있습니다.The access can be one of the BindingFlags such as Public, NonPublic, Private, InvokeMethod, GetField, and so on. 조회 형식을 지정할 필요가 없습니다.The type of lookup need not be specified. 조회 형식을 생략하면 BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static이 사용됩니다.If the type of lookup is omitted, BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static are used.

binder
Binder Binder Binder

속성 집합을 정의하고 바인딩을 활성화하는 개체입니다. 이 개체는 또한 리플렉션을 통해 오버로드된 메서드를 선택할 수 있고 인수 형식을 강제 변환할 수 있으며 멤버를 호출할 수도 있습니다.An object that defines a set of properties and enables binding, which can involve selection of an overloaded method, coercion of argument types, and invocation of a member through reflection.

또는-or- Nothing를 사용하려면 null 참조(Visual Basic의 경우 DefaultBinder)입니다.A null reference (Nothing in Visual Basic), to use the DefaultBinder. 변수 인수를 사용하여 메서드 오버로드를 호출하려면 Binder 개체를 명시적으로 정의해야 할 수도 있습니다.Note that explicitly defining a Binder object may be required for successfully invoking method overloads with variable arguments.

target
Object Object Object

지정한 멤버를 호출할 개체입니다.The object on which to invoke the specified member.

args
Object[]

호출할 멤버에 전달하는 인수를 포함하는 배열입니다.An array containing the arguments to pass to the member to invoke.

반환

호출된 멤버의 반환 값을 나타내는 개체입니다.An object representing the return value of the invoked member.

구현

예외

invokeAttrCreateInstance가 포함되어 있지 않으며 namenull입니다.invokeAttr does not contain CreateInstance and name is null.

invokeAttr이 올바른 BindingFlags 특성이 아닙니다.invokeAttr is not a valid BindingFlags attribute.

또는-or- invokeAttrInvokeMethod, CreateInstance, GetField, SetField, GetProperty 또는 SetProperty 바인딩 플래그 중 하나가 포함되어 있지 않습니다.invokeAttr does not contain one of the following binding flags: InvokeMethod, CreateInstance, GetField, SetField, GetProperty, or SetProperty.

또는-or- invokeAttrInvokeMethod, GetField, SetField, GetProperty 또는 SetProperty와 결합된 CreateInstance가 포함되어 있습니다.invokeAttr contains CreateInstance combined with InvokeMethod, GetField, SetField, GetProperty, or SetProperty.

또는-or- invokeAttrGetFieldSetField가 둘 다 포함되어 있습니다.invokeAttr contains both GetField and SetField.

또는-or- invokeAttrGetPropertySetProperty가 둘 다 포함되어 있습니다.invokeAttr contains both GetProperty and SetProperty.

또는-or- invokeAttrSetField 또는 SetProperty와 결합된 InvokeMethod가 포함되어 있습니다.invokeAttr contains InvokeMethod combined with SetField or SetProperty.

또는-or- invokeAttrSetField가 포함되어 있으며 args에 둘 이상의 요소가 있습니다.invokeAttr contains SetField and args has more than one element.

또는-or- 이 메서드가 COM 개체에 대해 호출되고 다음 바인딩 플래그 중 하나가 BindingFlags.InvokeMethod, BindingFlags.GetProperty, BindingFlags.SetProperty, BindingFlags.PutDispProperty 또는 BindingFlags.PutRefDispProperty로 전달되지 않았습니다.This method is called on a COM object and one of the following binding flags was not passed in: BindingFlags.InvokeMethod, BindingFlags.GetProperty, BindingFlags.SetProperty, BindingFlags.PutDispProperty, or BindingFlags.PutRefDispProperty.

또는-or- 명명된 매개 변수 배열 중 하나에 null인 문자열이 포함되어 있습니다.One of the named parameter arrays contains a string that is null.

지정된 멤버가 클래스 이니셜라이저입니다.The specified member is a class initializer.

필드 또는 속성을 찾을 수 없습니다.The field or property cannot be found.

args의 인수와 일치하는 메서드를 찾을 수 없습니다.No method can be found that matches the arguments in args.

또는-or- 현재 Type 개체가 개방형 매개 변수를 포함하는 형식, 즉, ContainsGenericParameterstrue를 반환하는 형식을 나타냅니다.The current Type object represents a type that contains open type parameters, that is, ContainsGenericParameters returns true.

지정된 멤버를 target에 대해 호출할 수 없습니다.The specified member cannot be invoked on target.

두 개 이상의 메서드가 바인딩 기준과 일치합니다.More than one method matches the binding criteria.

.NET Compact Framework에서는 현재 이 메서드를 지원하지 않습니다.The .NET Compact Framework does not currently support this method.

name이 나타내는 메서드에 두 개 이상의 제네릭 형식 매개 변수가 지정되지 않았습니다.The method represented by name has one or more unspecified generic type parameters. 즉, 메서드의 ContainsGenericParameters 속성이 true를 반환합니다.That is, the method's ContainsGenericParameters property returns true.

예제

다음 예제에서는 InvokeMember 형식의 멤버에 액세스 해야 합니다.The following example uses InvokeMember to access members of a type.

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);
    }
}
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 제네릭 메서드를 호출 합니다.You cannot use InvokeMember to invoke a generic method.

다음 BindingFlags 필터 플래그를 사용 하 여 검색에 포함할 멤버를 정의할 수 있습니다.The following BindingFlags filter flags can be used to define which members to include in the search:

  • 지정 BindingFlags.Public 검색에 public 멤버를 포함 합니다.Specify BindingFlags.Public to include public members in the search.

  • 지정 BindingFlags.NonPublic 검색에서 (즉, private 및 protected 멤버) public이 아닌 멤버를 포함 합니다.Specify BindingFlags.NonPublic to include non-public members (that is, private and protected members) in the search.

  • 지정 BindingFlags.FlattenHierarchy 계층 정적 멤버를 포함 합니다.Specify BindingFlags.FlattenHierarchy to include static members up the hierarchy.

다음 BindingFlags 한정자 플래그를 사용 하 여 검색의 작동 방식을 변경할 수 있습니다.The following BindingFlags modifier flags can be used to change how the search works:

  • BindingFlags.IgnoreCase 대/소문자를 무시 하려면 name합니다.BindingFlags.IgnoreCase to ignore the case of name.

  • BindingFlags.DeclaredOnly 에 선언 된 멤버만 검색 하 여 Type, 상속 된 멤버가 아닌 합니다.BindingFlags.DeclaredOnly to search only the members declared on the Type, not members that were simply inherited.

다음 BindingFlags 호출 플래그 멤버를 사용 하 여 수행할 작업을 나타내는 데 사용할 수 있습니다.The following BindingFlags invocation flags can be used to denote what action to take with the member:

  • CreateInstance 생성자를 호출 합니다.CreateInstance to invoke a constructor. name 무시 됩니다.name is ignored. 다른 호출 플래그를 사용 하 여 유효 하지 않습니다.Not valid with other invocation flags.

  • InvokeMethod 생성자 또는 형식 이니셜라이저가 없습니다 메서드를 하지만 호출 합니다.InvokeMethod to invoke a method, but not a constructor or a type initializer. 잘못 된 SetField 또는 SetProperty합니다.Not valid with SetField or SetProperty. 하는 경우 InvokeMethod 자체에 의해 지정 됩니다 BindingFlags.PublicBindingFlags.Instance, 및 BindingFlags.Static 자동으로 포함 됩니다.If InvokeMethod is specified by itself, BindingFlags.Public, BindingFlags.Instance, and BindingFlags.Static are automatically included.

  • GetField 에 필드의 값을 가져옵니다.GetField to get the value of a field. 잘못 된 SetField합니다.Not valid with SetField.

  • SetField 필드의 값을 설정 합니다.SetField to set the value of a field. 잘못 된 GetField합니다.Not valid with GetField.

  • GetProperty 속성을 가져오기 합니다.GetProperty to get a property. 잘못 된 SetProperty합니다.Not valid with SetProperty.

  • SetProperty 속성을 설정 합니다.SetProperty to set a property. 잘못 된 GetProperty합니다.Not valid with GetProperty.

자세한 내용은 System.Reflection.BindingFlags를 참조하세요.See System.Reflection.BindingFlags for more information.

메서드는 다음 조건이 모두 참인 경우 호출 됩니다.A method will be invoked if both of the following conditions are true:

  • 메서드 선언에서 매개 변수 수가 같음의 인수 개수는 args 배열 (기본 인수는 멤버에 정의 되지 않은 경우 및 BindingFlags.OptionalParamBinding 지정).The number of parameters in the method declaration equals the number of arguments in the args array (unless default arguments are defined on the member and BindingFlags.OptionalParamBinding is specified).

  • 매개 변수의 형식 바인더를 통해 각 인수의 형식을 변환할 수 있습니다.The type of each argument can be converted by the binder to the type of the parameter.

바인더 모든 일치 하는 메서드를 찾을 수 있습니다.The binder will find all of the matching methods. 요청 된 바인딩 형식에 따라 이러한 메서드를 찾습니다 (BindingFlagsInvokeMethod, GetProperty등).These methods are found based upon the type of binding requested (BindingFlags values InvokeMethod, GetProperty, and so on). 메서드의 집합 이름, 인수 개수를 및 바인더에서 정의 된 검색 한정자 집합으로 필터링 됩니다.The set of methods is filtered by the name, number of arguments, and a set of search modifiers defined in the binder.

메서드를 선택한 후 호출 됩니다.After the method is selected, it is invoked. 이때에 내게 필요한 옵션 확인 됩니다.Accessibility is checked at that point. 검색은 메서드를 사용 하 여 연결 된 내게 필요한 옵션 특성에 따라 검색할 메서드의 집합을 제어할 수 있습니다.The search may control which set of methods are searched based upon the accessibility attribute associated with the method. 합니다 Binder.BindToMethod 메서드를 Binder 클래스는 메서드를 호출할 수를 선택 하는 일을 담당 합니다.The Binder.BindToMethod method of the Binder class is responsible for selecting the method to be invoked. 기본 바인더를 가장 구체적으로 일치를 선택합니다.The default binder selects the most specific match.

완전히 신뢰할 수 있는 코드에 대 한 액세스 제한이 무시 됩니다. 즉, 개인 생성자, 메서드, 필드 및 속성 액세스 하 고 수를 통해 호출 System.Reflection 때마다 코드는 완전히 신뢰할 수 있습니다.Access restrictions are ignored for fully trusted code; that is, private constructors, methods, fields, and properties can be accessed and invoked through System.Reflection whenever the code is fully trusted.

사용할 수 있습니다 Type.InvokeMember 필드를 지정 하 여 특정 값으로 설정 하려면 BindingFlags.SetField합니다.You can use Type.InvokeMember to set a field to a particular value by specifying BindingFlags.SetField. 예를 들어, 클래스 C F에 F 라는 공용 인스턴스 필드를 설정 하려는 경우는 String와 같은 코드를 사용할 수 있습니다.For example, if you want to set a public instance field named F on class C, and F is a String, you can use code such as:

typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {"strings new value"});

F가는 String[]와 같은 코드를 사용할 수 있습니다.If F is a String[], you can use code such as:

typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {new String[]{"a","z","c","d"}});

이 새 배열 F 필드가 초기화 됩니다.which will initialize the field F to this new array. 사용할 수도 있습니다 Type.InvokeMember 다음과 같은 코드를 사용 하 여 값 및 다음 값의 인덱스를 제공 하 여 배열에서 위치를 설정 하려면:You can also use Type.InvokeMember to set a position in an array by supplying the index of the value and then the next value by using code such as the following:

typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {1, "b"});

이 문자열 "z" F "b" 문자열을 포함 하는 배열에서 변경 됩니다.This will change string "z" in the array that F holds to string "b".

호출 하는 경우는 IDispatch 멤버의 경우 DispID 멤버 이름 대신 문자열 형식을 사용 하 여 지정할 수 있습니다 "[DispID = # #]"입니다.When you invoke an IDispatch member, you can specify the DispID instead of the member name, using the string format "[DispID=##]". 예를 들어 MyComMethod dispid가 3 인 경우 문자열을 지정할 수 "[DispID = 3]" 대신 "MyComMethod"입니다.For example, if the DispID of MyComMethod is 3, you can specify the string "[DispID=3]" instead of "MyComMethod". DispID로 멤버를 호출 하는 것은 멤버 이름으로 조회 보다 빠릅니다.Invoking a member by DispID is faster than looking up the member by name. 복잡 한 집계 시나리오의 경우 DispID의 경우에 따라 원하는 멤버를 호출 하는 유일한 방법은 합니다.In complex aggregation scenarios, the DispID is sometimes the only way to invoke the desired member.

참고

부터 합니다 .NET Framework 2.0 서비스 팩 1.NET Framework 2.0 Service Pack 1,이 메서드를 사용 하 여 호출자에 게 부여 된 경우 public이 아닌 멤버에 액세스할 수 있습니다 ReflectionPermission 사용 하 여는 ReflectionPermissionFlag.RestrictedMemberAccess 플래그 및 public이 아닌 멤버의 권한 부여 집합 호출자 에게만 부여 된 집합 또는 하위 집합 그 합니다.Starting with the .NET Framework 2.0 서비스 팩 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.

보안

ReflectionPermission
해당 권한 부여에 관계 없이 public이 아닌 멤버에 액세스 하기 위해 다음을 설정 합니다.for accessing non-public members regardless of their grant set. 연결 된 열거형: MemberAccessAssociated enumeration: MemberAccess

SecurityPermission
비관리 코드를 호출 합니다.to call unmanaged code. 연결 된 열거형: UnmanagedCodeAssociated enumeration: UnmanagedCode

추가 정보

InvokeMember(String, BindingFlags, Binder, Object, Object[], CultureInfo) InvokeMember(String, BindingFlags, Binder, Object, Object[], CultureInfo) InvokeMember(String, BindingFlags, Binder, Object, Object[], CultureInfo)

지정된 바인딩 제약 조건과 지정된 인수 목록 및 문화권을 사용하여 지정된 멤버를 호출합니다.Invokes the specified member, using the specified binding constraints and matching the specified argument list and 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);
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

매개 변수

name
String String String

호출할 생성자, 메서드, 속성 또는 필드 멤버의 이름이 포함된 문자열입니다.The string containing the name of the constructor, method, property, or field member to invoke.

또는-or- 기본 멤버를 호출하는 빈 문자열("")입니다.An empty string ("") to invoke the default member.

또는-or- IDispatch 멤버의 경우 DispID를 나타내는 문자열(예: "[DispID=3]")입니다.For IDispatch members, a string representing the DispID, for example "[DispID=3]".

invokeAttr
BindingFlags BindingFlags BindingFlags

검색 방법을 지정하는 열거형 값의 비트 조합입니다.A bitwise combination of the enumeration values that specify how the search is conducted. 액세스 권한은 BindingFlags, Public, NonPublic, Private, InvokeMethod 등과 같은 GetField 중 하나가 될 수 있습니다.The access can be one of the BindingFlags such as Public, NonPublic, Private, InvokeMethod, GetField, and so on. 조회 형식을 지정할 필요가 없습니다.The type of lookup need not be specified. 조회 형식을 생략하면 BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static이 사용됩니다.If the type of lookup is omitted, BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static are used.

binder
Binder Binder Binder

속성 집합을 정의하고 바인딩을 활성화하는 개체입니다. 이 개체는 또한 리플렉션을 통해 오버로드된 메서드를 선택할 수 있고 인수 형식을 강제 변환할 수 있으며 멤버를 호출할 수도 있습니다.An object that defines a set of properties and enables binding, which can involve selection of an overloaded method, coercion of argument types, and invocation of a member through reflection.

또는-or- Nothing를 사용하려면 null 참조(Visual Basic의 경우 DefaultBinder)입니다.A null reference (Nothing in Visual Basic), to use the DefaultBinder. 변수 인수를 사용하여 메서드 오버로드를 호출하려면 Binder 개체를 명시적으로 정의해야 할 수도 있습니다.Note that explicitly defining a Binder object may be required for successfully invoking method overloads with variable arguments.

target
Object Object Object

지정한 멤버를 호출할 개체입니다.The object on which to invoke the specified member.

args
Object[]

호출할 멤버에 전달하는 인수를 포함하는 배열입니다.An array containing the arguments to pass to the member to invoke.

culture
CultureInfo CultureInfo CultureInfo

사용할 전역화 로캘을 나타내는 개체입니다. 이 개체는 숫자 StringDouble로 변환하는 등의 로캘별 변환에 사용할 수 있습니다.The object representing the globalization locale to use, which may be necessary for locale-specific conversions, such as converting a numeric String to a Double.

또는-or- 현재 스레드의 Nothing를 사용하려면 null 참조(Visual Basic의 경우 CultureInfo)입니다.A null reference (Nothing in Visual Basic) to use the current thread's CultureInfo.

반환

호출된 멤버의 반환 값을 나타내는 개체입니다.An object representing the return value of the invoked member.

구현

예외

invokeAttrCreateInstance가 포함되어 있지 않으며 namenull입니다.invokeAttr does not contain CreateInstance and name is null.

invokeAttr이 올바른 BindingFlags 특성이 아닙니다.invokeAttr is not a valid BindingFlags attribute.

또는-or- invokeAttrInvokeMethod, CreateInstance, GetField, SetField, GetProperty 또는 SetProperty 바인딩 플래그 중 하나가 포함되어 있지 않습니다.invokeAttr does not contain one of the following binding flags: InvokeMethod, CreateInstance, GetField, SetField, GetProperty, or SetProperty.

또는-or- invokeAttrInvokeMethod, GetField, SetField, GetProperty 또는 SetProperty와 결합된 CreateInstance가 포함되어 있습니다.invokeAttr contains CreateInstance combined with InvokeMethod, GetField, SetField, GetProperty, or SetProperty.

또는-or- invokeAttrGetFieldSetField가 둘 다 포함되어 있습니다.invokeAttr contains both GetField and SetField.

또는-or- invokeAttrGetPropertySetProperty가 둘 다 포함되어 있습니다.invokeAttr contains both GetProperty and SetProperty.

또는-or- invokeAttrSetField 또는 SetProperty와 결합된 InvokeMethod가 포함되어 있습니다.invokeAttr contains InvokeMethod combined with SetField or SetProperty.

또는-or- invokeAttrSetField가 포함되어 있으며 args에 둘 이상의 요소가 있습니다.invokeAttr contains SetField and args has more than one element.

또는-or- 이 메서드가 COM 개체에 대해 호출되고 다음 바인딩 플래그 중 하나가 BindingFlags.InvokeMethod, BindingFlags.GetProperty, BindingFlags.SetProperty, BindingFlags.PutDispProperty 또는 BindingFlags.PutRefDispProperty로 전달되지 않았습니다.This method is called on a COM object and one of the following binding flags was not passed in: BindingFlags.InvokeMethod, BindingFlags.GetProperty, BindingFlags.SetProperty, BindingFlags.PutDispProperty, or BindingFlags.PutRefDispProperty.

또는-or- 명명된 매개 변수 배열 중 하나에 null인 문자열이 포함되어 있습니다.One of the named parameter arrays contains a string that is null.

지정된 멤버가 클래스 이니셜라이저입니다.The specified member is a class initializer.

필드 또는 속성을 찾을 수 없습니다.The field or property cannot be found.

args의 인수와 일치하는 메서드를 찾을 수 없습니다.No method can be found that matches the arguments in args.

또는-or- 현재 Type 개체가 개방형 매개 변수를 포함하는 형식, 즉, ContainsGenericParameterstrue를 반환하는 형식을 나타냅니다.The current Type object represents a type that contains open type parameters, that is, ContainsGenericParameters returns true.

지정된 멤버를 target에 대해 호출할 수 없습니다.The specified member cannot be invoked on target.

두 개 이상의 메서드가 바인딩 기준과 일치합니다.More than one method matches the binding criteria.

name이 나타내는 메서드에 두 개 이상의 제네릭 형식 매개 변수가 지정되지 않았습니다.The method represented by name has one or more unspecified generic type parameters. 즉, 메서드의 ContainsGenericParameters 속성이 true를 반환합니다.That is, the method's ContainsGenericParameters property returns true.

설명

기본 바인더를 처리 하지 않습니다 하지만 CultureInfo (합니다 culture 매개 변수), 추상을 사용할 수 있습니다 System.Reflection.Binder 는 사용자 지정 처리 하는 바인더를 작성 하는 클래스 culture합니다.Although the default binder does not process CultureInfo (the culture parameter), you can use the abstract System.Reflection.Binder class to write a custom binder that does process culture.

참고

사용할 수 없습니다 InvokeMember 제네릭 메서드를 호출 합니다.You cannot use InvokeMember to invoke a generic method.

다음 BindingFlags 필터 플래그를 사용 하 여 검색에 포함할 멤버를 정의할 수 있습니다.The following BindingFlags filter flags can be used to define which members to include in the search:

  • 지정 BindingFlags.Public 검색에 public 멤버를 포함 합니다.Specify BindingFlags.Public to include public members in the search.

  • 지정 BindingFlags.NonPublic 검색에서 (즉,: private, internal 및 protected 멤버) public이 아닌 멤버를 포함 합니다.Specify BindingFlags.NonPublic to include non-public members (that is, private, internal, and protected members) in the search.

  • 지정 BindingFlags.FlattenHierarchy 계층 정적 멤버를 포함 합니다.Specify BindingFlags.FlattenHierarchy to include static members up the hierarchy.

다음 BindingFlags 한정자 플래그를 사용 하 여 검색의 작동 방식을 변경할 수 있습니다.The following BindingFlags modifier flags can be used to change how the search works:

  • BindingFlags.IgnoreCase 대/소문자를 무시 하려면 name합니다.BindingFlags.IgnoreCase to ignore the case of name.

  • BindingFlags.DeclaredOnly 에 선언 된 멤버만 검색 하 여 Type, 상속 된 멤버가 아닌 합니다.BindingFlags.DeclaredOnly to search only the members declared on the Type, not members that were simply inherited.

다음 BindingFlags 호출 플래그 멤버를 사용 하 여 수행할 작업을 나타내는 데 사용할 수 있습니다.The following BindingFlags invocation flags can be used to denote what action to take with the member:

  • CreateInstance 생성자를 호출 합니다.CreateInstance to invoke a constructor. name 무시 됩니다.name is ignored. 다른 호출 플래그를 사용 하 여 유효 하지 않습니다.Not valid with other invocation flags.

  • InvokeMethod 생성자 또는 형식 이니셜라이저가 없습니다 메서드를 하지만 호출 합니다.InvokeMethod to invoke a method, but not a constructor or a type initializer. 잘못 된 SetField 또는 SetProperty합니다.Not valid with SetField or SetProperty. 하는 경우 InvokeMethod 자체에 의해 지정 됩니다 BindingFlags.PublicBindingFlags.Instance, 및 BindingFlags.Static 자동으로 포함 됩니다.If InvokeMethod is specified by itself, BindingFlags.Public, BindingFlags.Instance, and BindingFlags.Static are automatically included.

  • GetField 에 필드의 값을 가져옵니다.GetField to get the value of a field. 잘못 된 SetField합니다.Not valid with SetField.

  • SetField 필드의 값을 설정 합니다.SetField to set the value of a field. 잘못 된 GetField합니다.Not valid with GetField.

  • GetProperty 속성을 가져오기 합니다.GetProperty to get a property. 잘못 된 SetProperty합니다.Not valid with SetProperty.

  • SetProperty 속성을 설정 합니다.SetProperty to set a property. 잘못 된 GetProperty합니다.Not valid with GetProperty.

자세한 내용은 System.Reflection.BindingFlags를 참조하세요.See System.Reflection.BindingFlags for more information.

메서드는 다음 조건이 모두 참인 경우 호출 됩니다.A method will be invoked if both of the following conditions are true:

  • 메서드 선언에서 매개 변수 수가 같음의 인수 개수는 args 배열 (기본 인수는 멤버에 정의 되지 않은 경우 및 BindingFlags.OptionalParamBinding 지정).The number of parameters in the method declaration equals the number of arguments in the args array (unless default arguments are defined on the member and BindingFlags.OptionalParamBinding is specified).

  • 매개 변수의 형식 바인더를 통해 각 인수의 형식을 변환할 수 있습니다.The type of each argument can be converted by the binder to the type of the parameter.

바인더 모든 일치 하는 메서드를 찾을 수 있습니다.The binder will find all of the matching methods. 요청 된 바인딩 형식에 따라 이러한 메서드를 찾습니다 (BindingFlagsInvokeMethod, GetProperty등).These methods are found based upon the type of binding requested (BindingFlags values InvokeMethod, GetProperty, and so on). 메서드의 집합 이름, 인수 개수를 및 바인더에서 정의 된 검색 한정자 집합으로 필터링 됩니다.The set of methods is filtered by the name, number of arguments, and a set of search modifiers defined in the binder.

메서드를 선택한 후 호출 됩니다.After the method is selected, it is invoked. 이때에 내게 필요한 옵션 확인 됩니다.Accessibility is checked at that point. 검색은 메서드를 사용 하 여 연결 된 내게 필요한 옵션 특성에 따라 검색할 메서드의 집합을 제어할 수 있습니다.The search may control which set of methods are searched based upon the accessibility attribute associated with the method. 합니다 Binder.BindToMethod 메서드를 Binder 클래스는 메서드를 호출할 수를 선택 하는 일을 담당 합니다.The Binder.BindToMethod method of the Binder class is responsible for selecting the method to be invoked. 기본 바인더를 가장 구체적으로 일치를 선택합니다.The default binder selects the most specific match.

완전히 신뢰할 수 있는 코드에 대 한 액세스 제한이 무시 됩니다. 즉, 개인 생성자, 메서드, 필드 및 속성 액세스 하 고 수 코드를 완전히 신뢰할 수 있는 경우 리플렉션을 통해 호출 합니다.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.

사용할 수 있습니다 Type.InvokeMember 필드를 지정 하 여 특정 값으로 설정 하려면 BindingFlags.SetField합니다.You can use Type.InvokeMember to set a field to a particular value by specifying BindingFlags.SetField. 예를 들어, 클래스 C F에 F 라는 공용 인스턴스 필드를 설정 하려는 경우는 String 와 같은 코드를 사용할 수 있습니다.For example, if you want to set a public instance field named F on class C, and F is a String you can use code such as:

typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {"strings new value"}, null);

F가는 String[]와 같은 코드를 사용할 수 있습니다.If F is a String[], you can use code such as:

typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {new String[]{"a","z","c","d"}}, null);

이 새 배열 F 필드가 초기화 됩니다.which will initialize the field F to this new array. 사용할 수도 있습니다 Type.InvokeMember 다음과 같은 코드를 사용 하 여 값 및 다음 값의 인덱스를 제공 하 여 배열에서 위치를 설정 하려면:You can also use Type.InvokeMember to set a position in an array by supplying the index of the value and then the next value by using code such as the following:

typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {1, "b"}, null);

이 문자열 "z" F "b" 문자열을 포함 하는 배열에서 변경 됩니다.This will change string "z" in the array that F holds to string "b".

호출 하는 경우는 IDispatch 멤버의 경우 DispID 멤버 이름 대신 문자열 형식을 사용 하 여 지정할 수 있습니다 "[DispID = # #]"입니다.When you invoke an IDispatch member you can specify the DispID instead of the member name, using the string format "[DispID=##]". 예를 들어 MyComMethod dispid가 3 인 경우 문자열을 지정할 수 "[DispID = 3]" 대신 "MyComMethod"입니다.For example, if the DispID of MyComMethod is 3, you can specify the string "[DispID=3]" instead of "MyComMethod". DispID로 멤버를 호출 하는 것은 멤버 이름으로 조회 보다 빠릅니다.Invoking a member by DispID is faster than looking up the member by name. 복잡 한 집계 시나리오의 경우 DispID의 경우에 따라 원하는 멤버를 호출 하는 유일한 방법은 합니다.In complex aggregation scenarios, the DispID is sometimes the only way to invoke the desired member.

참고

부터 합니다 .NET Framework 2.0 서비스 팩 1.NET Framework 2.0 Service Pack 1,이 메서드를 사용 하 여 호출자에 게 부여 된 경우 public이 아닌 멤버에 액세스할 수 있습니다 ReflectionPermission 사용 하 여는 ReflectionPermissionFlag.RestrictedMemberAccess 플래그 및 public이 아닌 멤버의 권한 부여 집합 호출자 에게만 부여 된 집합 또는 하위 집합 그 합니다.Starting with the .NET Framework 2.0 서비스 팩 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.

보안

ReflectionPermission
해당 권한 부여에 관계 없이 public이 아닌 멤버에 액세스 하기 위해 다음을 설정 합니다.for accessing non-public members regardless of their grant set. 연결 된 열거형: MemberAccessAssociated enumeration: MemberAccess

SecurityPermission
비관리 코드를 호출 합니다.to call unmanaged code. 연결 된 열거형: UnmanagedCodeAssociated enumeration: UnmanagedCode

추가 정보

적용 대상