Type.InvokeMember Yöntem
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
Geçerli Typeöğesinin belirli bir üyesini çağırır.
Aşırı Yüklemeler
| InvokeMember(String, BindingFlags, Binder, Object, Object[]) |
Belirtilen bağlama kısıtlamalarını kullanarak ve belirtilen bağımsız değişken listesiyle eşleşen belirtilen üyeyi çağırır. |
| InvokeMember(String, BindingFlags, Binder, Object, Object[], CultureInfo) |
Belirtilen bağlama kısıtlamalarını kullanarak ve belirtilen bağımsız değişken listesi ve kültürüyle eşleşen belirtilen üyeyi çağırır. |
| InvokeMember(String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[]) |
Türetilmiş bir sınıfta geçersiz kılındığında, belirtilen bağlama kısıtlamalarını kullanarak ve belirtilen bağımsız değişken listesi, değiştiriciler ve kültürle eşleşen belirtilen üyeyi çağırır. |
InvokeMember(String, BindingFlags, Binder, Object, Object[])
- Kaynak:
- Type.cs
- Kaynak:
- Type.cs
- Kaynak:
- Type.cs
Belirtilen bağlama kısıtlamalarını kullanarak ve belirtilen bağımsız değişken listesiyle eşleşen belirtilen üyeyi çağırır.
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
Parametreler
- name
- String
Çağrılacak oluşturucunun, yöntemin, özelliğin veya alan üyesinin adını içeren dize.
-veya-
Varsayılan üyeyi çağırmak için boş bir dize ("").
-veya-
Üyeler için IDispatch DispID'yi temsil eden bir dize, örneğin "[DispID=3]".
- invokeAttr
- BindingFlags
Aramanın nasıl yürütüleceğini belirten numaralandırma değerlerinin bit düzeyinde birleşimi. Erişim , , , , , GetFieldvb. gibi Publicbir BindingFlags erişim InvokeMethodolabilir. PrivateNonPublic Arama türü belirtilmemelidir. Arama türü atlanırsa kullanılırBindingFlags.PublicBindingFlags.Static | BindingFlags.Instance | .
- binder
- Binder
Aşırı yüklenmiş yöntem seçimi, bağımsız değişken türlerinin uygulatılması ve yansıtma yoluyla bir üyenin çağrılması işlemlerini içerebilen; özellikler kümesini tanımlayan ve bağlama işlemine olanak veren bir nesne.
-veya-
kullanmak DefaultBinderiçin null başvuru (NothingVisual Basic'te). Değişken bağımsız değişkenleriyle yöntem aşırı yüklemelerini başarıyla çağırmak için bir Binder nesneyi açıkça tanımlamanın gerekebileceğini unutmayın.
- target
- Object
Belirtilen üyenin çağrıldığı nesne.
- args
- Object[]
Çağrılacak üyeye geçirilmesi için bağımsız değişkenleri içeren bir dizi.
Döndürülenler
Çağrılan üyenin dönüş değerini temsil eden bir nesne.
Uygulamalar
Özel durumlar
invokeAttr ve içermez CreateInstancenamenull.
invokeAttr geçerli BindingFlags bir öznitelik değil.
-veya-
invokeAttr şu bağlama bayraklarından birini içermez: InvokeMethod, CreateInstance, GetField, SetField, GetPropertyveya SetProperty.
-veya-
invokeAttr, , GetField, SetFieldGetPropertyveya SetPropertyile InvokeMethodbirlikte içerirCreateInstance.
-veya-
invokeAttrhem SetFieldhem de GetField içerir.
-veya-
invokeAttrhem SetPropertyhem de GetProperty içerir.
-veya-
invokeAttrveya SetPropertyile birlikte SetField içerirInvokeMethod.
-veya-
invokeAttr içerir SetField ve args birden fazla öğeye sahiptir.
-veya-
Bu yöntem bir COM nesnesinde çağrılır ve şu bağlama bayraklarından biri içinde geçirilmemiştir: BindingFlags.InvokeMethod, BindingFlags.GetProperty, BindingFlags.SetProperty, BindingFlags.PutDispPropertyveya BindingFlags.PutRefDispProperty.
-veya-
Adlandırılmış parametre dizilerinden biri olan nullbir dize içerir.
Belirtilen üye bir sınıf başlatıcısı.
Alan veya özellik bulunamıyor.
içindeki argsbağımsız değişkenlerle eşleşen hiçbir yöntem bulunamadı.
-veya-
Geçerli Type nesne, açık tür parametreleri içeren bir türü temsil eder, ContainsGenericParameters yani döndürür true.
Belirtilen üye üzerinde targetçağrılamıyor.
Bağlama ölçütleri ile eşleşen birden fazla yöntem vardır.
.NET Compact Framework şu anda bu yöntemi desteklemiyor.
ile name temsil edilen yöntemin bir veya daha fazla belirtilmemiş genel tür parametresi vardır. Başka bir ifadeyle yöntemin ContainsGenericParameters özelliği döndürür true.
Örnekler
Aşağıdaki örnek, bir türün üyelerine erişmek için kullanır 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
Açıklamalar
Not
Genel bir yöntemi çağırmak için kullanamazsınız InvokeMember .
Aşağıdaki BindingFlags filtre bayrakları, aramaya hangi üyelerin dahil edilebileceğini tanımlamak için kullanılabilir:
Genel üyeleri aramaya dahil etmek için belirtin
BindingFlags.Public.Genel olmayan üyeleri (özel ve korumalı üyeler) aramaya dahil etmek için belirtin
BindingFlags.NonPublic.Statik üyeleri hiyerarşiye dahil etmek için belirtin
BindingFlags.FlattenHierarchy.
Aramanın çalışma şeklini değiştirmek için aşağıdaki BindingFlags değiştirici bayraklar kullanılabilir:
BindingFlags.IgnoreCaseöğesinin büyük/küçük harf durumununameyoksaymak için.BindingFlags.DeclaredOnlyyalnızca üzerinde Typebildirilen üyeleri aramak için yalnızca devralınan üyeleri değil.
Üyeyle gerçekleştirilecek eylemi belirtmek için aşağıdaki BindingFlags çağırma bayrakları kullanılabilir:
CreateInstancebir oluşturucu çağırmak için.nameyoksayılır. Diğer çağırma bayraklarıyla geçerli değil.InvokeMethodbir yöntemi çağırmak için, ancak bir oluşturucuyu veya tür başlatıcıyı çağırmaz. veyaSetPropertyileSetFieldgeçerli değil. kendi kendine belirtilirseInvokeMethod,BindingFlags.Public,BindingFlags.InstanceveBindingFlags.Staticotomatik olarak eklenir.GetFieldbir alanın değerini almak için. ileSetFieldgeçerli değil.SetFieldbir alanın değerini ayarlamak için. ileGetFieldgeçerli değil.GetPropertybir özellik almak için. ileSetPropertygeçerli değil.SetPropertybir özellik ayarlamak için. ileGetPropertygeçerli değil.
Daha fazla bilgi edinmek için bkz. System.Reflection.BindingFlags.
Aşağıdaki koşulların her ikisi de doğruysa bir yöntem çağrılır:
Yöntem bildirimindeki parametre sayısı dizideki bağımsız değişkenlerin sayısına eşittir (üyede
argsvarsayılan bağımsız değişkenler tanımlanmadığı veBindingFlags.OptionalParamBindingbelirtilmediği sürece).Her bağımsız değişkenin türü bağlayıcı tarafından parametrenin türüne dönüştürülebilir.
Bağlayıcı tüm eşleşen yöntemleri bulur. Bu yöntemler istenen bağlama türüne (BindingFlags değerler InvokeMethod, GetPropertyvb.) göre bulunur. Yöntem kümesi ada, bağımsız değişken sayısına ve bağlayıcıda tanımlanan bir arama değiştirici kümesine göre filtrelenmiştir.
Yöntem seçildikten sonra çağrılır. Erişilebilirlik bu noktada denetlendi. Arama, yöntemiyle ilişkili erişilebilirlik özniteliğine göre hangi yöntem kümesinin aranabileceğini denetleyebilir. Binder.BindToMethod sınıfının yöntemiBinder, çağrılacak yöntemi seçmekle sorumludur. Varsayılan bağlayıcı en belirli eşleşmeyi seçer.
Tam olarak güvenilen kod için erişim kısıtlamaları yoksayılır; yani özel oluşturucular, yöntemler, alanlar ve özellikler koda tam olarak güvenildiğinde üzerinden System.Reflection erişilebilir ve çağrılabilir.
belirterek BindingFlags.SetFieldbir alanı belirli bir değere ayarlamak için kullanabilirsinizType.InvokeMember. Örneğin, C sınıfında F adlı bir genel örnek alanı ayarlamak istiyorsanız ve F bir Stringise, aşağıdaki gibi bir kod kullanabilirsiniz:
typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {"strings new value"});
F bir String[]ise, aşağıdaki gibi bir kod kullanabilirsiniz:
typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {new String[]{"a","z","c","d"}});
F alanını bu yeni diziye başlatacaktır. Değerin dizinini ve ardından aşağıdaki gibi bir kod kullanarak sonraki değeri sağlayarak dizide bir konum ayarlamak için de kullanabilirsiniz Type.InvokeMember :
typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {1, "b"});
Bu, F'nin tuttuğu dizideki "z" dizesini "b" dizesi olarak değiştirir.
Bir IDispatch üyeyi çağırdığınızda, "[DispID=##]" dize biçimini kullanarak üye adı yerine DispID değerini belirtebilirsiniz. Örneğin, MyComMethod'un DispID değeri 3 ise, "MyComMethod" yerine "[DispID=3]" dizesini belirtebilirsiniz. Üyeyi DispID ile çağırmak, üyeyi ada göre aramaktan daha hızlıdır. Karmaşık toplama senaryolarında dispID bazen istenen üyeyi çağırmanın tek yoludur.
Not
.NET Framework 2.0 Service Pack 1'den başlayarak bu yöntem, çağıranın bayrağıyla verilmiş ReflectionPermission olması ve ortak olmayan üyelerin izin kümesinin çağıranın izin kümesiyle veya bunun bir alt kümesiyle ReflectionPermissionFlag.RestrictedMemberAccess sınırlı olması durumunda genel olmayan üyelere erişmek için kullanılabilir. (Bkz. Yansıma için GüvenlikLe İlgili Dikkat Edilmesi Gerekenler.)
Bu işlevselliği kullanmak için uygulamanızın .NET Framework 3.5 veya sonraki bir sürümü hedeflemesi gerekir.
Ayrıca bkz.
- String
- Binder
- DefaultBinder
- BindingFlags
- ParameterModifier
- ParameterAttributes
- CultureInfo
- ReflectionPermission
Şunlara uygulanır
InvokeMember(String, BindingFlags, Binder, Object, Object[], CultureInfo)
- Kaynak:
- Type.cs
- Kaynak:
- Type.cs
- Kaynak:
- Type.cs
Belirtilen bağlama kısıtlamalarını kullanarak ve belirtilen bağımsız değişken listesi ve kültürüyle eşleşen belirtilen üyeyi çağırır.
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
Parametreler
- name
- String
Çağrılacak oluşturucunun, yöntemin, özelliğin veya alan üyesinin adını içeren dize.
-veya-
Varsayılan üyeyi çağırmak için boş bir dize ("").
-veya-
Üyeler için IDispatch DispID'yi temsil eden bir dize, örneğin "[DispID=3]".
- invokeAttr
- BindingFlags
Aramanın nasıl yürütüleceğini belirten numaralandırma değerlerinin bit düzeyinde birleşimi. Erişim , , , , , GetFieldvb. gibi Publicbir BindingFlags erişim InvokeMethodolabilir. PrivateNonPublic Arama türü belirtilmemelidir. Arama türü atlanırsa kullanılırBindingFlags.PublicBindingFlags.Static | BindingFlags.Instance | .
- binder
- Binder
Aşırı yüklenmiş yöntem seçimi, bağımsız değişken türlerinin uygulatılması ve yansıtma yoluyla bir üyenin çağrılması işlemlerini içerebilen; özellikler kümesini tanımlayan ve bağlama işlemine olanak veren bir nesne.
-veya-
kullanmak DefaultBinderiçin null başvuru (NothingVisual Basic'te). Değişken bağımsız değişkenleriyle yöntem aşırı yüklemelerini başarıyla çağırmak için bir Binder nesneyi açıkça tanımlamanın gerekebileceğini unutmayın.
- target
- Object
Belirtilen üyenin çağrıldığı nesne.
- args
- Object[]
Çağrılacak üyeye geçirilmesi için bağımsız değişkenleri içeren bir dizi.
- culture
- CultureInfo
Kullanılacak genelleştirme yerel ayarını temsil eden nesne. Bu, bir sayısalı StringDoubleöğesine dönüştürme gibi yerel ayara özgü dönüştürmeler için gerekli olabilir.
-veya-
Geçerli iş parçacığının kullanmak için null başvuru (Nothing Visual Basic'te CultureInfo).
Döndürülenler
Çağrılan üyenin dönüş değerini temsil eden bir nesne.
Uygulamalar
Özel durumlar
invokeAttr ve içermez CreateInstancenamenull.
invokeAttr geçerli BindingFlags bir öznitelik değil.
-veya-
invokeAttr şu bağlama bayraklarından birini içermez: InvokeMethod, CreateInstance, GetField, SetField, GetPropertyveya SetProperty.
-veya-
invokeAttr, , GetField, SetFieldGetPropertyveya SetPropertyile InvokeMethodbirlikte içerirCreateInstance.
-veya-
invokeAttrhem SetFieldhem de GetField içerir.
-veya-
invokeAttrhem SetPropertyhem de GetProperty içerir.
-veya-
invokeAttrveya SetPropertyile birlikte SetField içerirInvokeMethod.
-veya-
invokeAttr içerir SetField ve args birden fazla öğeye sahiptir.
-veya-
Bu yöntem bir COM nesnesinde çağrılır ve şu bağlama bayraklarından biri içinde geçirilmemiştir: BindingFlags.InvokeMethod, BindingFlags.GetProperty, BindingFlags.SetProperty, BindingFlags.PutDispPropertyveya BindingFlags.PutRefDispProperty.
-veya-
Adlandırılmış parametre dizilerinden biri olan nullbir dize içerir.
Belirtilen üye bir sınıf başlatıcısı.
Alan veya özellik bulunamıyor.
içindeki argsbağımsız değişkenlerle eşleşen hiçbir yöntem bulunamadı.
-veya-
Geçerli Type nesne, açık tür parametreleri içeren bir türü temsil eder, ContainsGenericParameters yani döndürür true.
Belirtilen üye üzerinde targetçağrılamıyor.
Bağlama ölçütleri ile eşleşen birden fazla yöntem vardır.
ile name temsil edilen yöntemin bir veya daha fazla belirtilmemiş genel tür parametresi vardır. Başka bir ifadeyle yöntemin ContainsGenericParameters özelliği döndürür true.
Açıklamalar
Varsayılan bağlayıcı (cultureparametresi) işlemese CultureInfo de soyut sınıfını System.Reflection.Binder kullanarak işlemini culturegerçekleştiren özel bir bağlayıcı yazabilirsiniz.
Not
Genel bir yöntemi çağırmak için kullanamazsınız InvokeMember .
Aşağıdaki BindingFlags filtre bayrakları, aramaya hangi üyelerin dahil edilebileceğini tanımlamak için kullanılabilir:
Genel üyeleri aramaya dahil etmek için belirtin
BindingFlags.Public.Genel olmayan üyeleri (özel, iç ve korumalı üyeler) aramaya dahil etmek için belirtin
BindingFlags.NonPublic.Statik üyeleri hiyerarşiye dahil etmek için belirtin
BindingFlags.FlattenHierarchy.
Aramanın çalışma şeklini değiştirmek için aşağıdaki BindingFlags değiştirici bayraklar kullanılabilir:
BindingFlags.IgnoreCaseöğesinin büyük/küçük harf durumununameyoksaymak için.BindingFlags.DeclaredOnlyyalnızca üzerinde Typebildirilen üyeleri aramak için yalnızca devralınan üyeleri değil.
Üyeyle gerçekleştirilecek eylemi belirtmek için aşağıdaki BindingFlags çağırma bayrakları kullanılabilir:
CreateInstancebir oluşturucu çağırmak için.nameyoksayılır. Diğer çağırma bayraklarıyla geçerli değil.InvokeMethodbir yöntemi çağırmak için, ancak bir oluşturucuyu veya tür başlatıcıyı çağırmaz. veyaSetPropertyileSetFieldgeçerli değil. kendi kendine belirtilirseInvokeMethod,BindingFlags.Public,BindingFlags.InstanceveBindingFlags.Staticotomatik olarak eklenir.GetFieldbir alanın değerini almak için. ileSetFieldgeçerli değil.SetFieldbir alanın değerini ayarlamak için. ileGetFieldgeçerli değil.GetPropertybir özellik almak için. ileSetPropertygeçerli değil.SetPropertybir özellik ayarlamak için. ileGetPropertygeçerli değil.
Daha fazla bilgi edinmek için bkz. System.Reflection.BindingFlags.
Aşağıdaki koşulların her ikisi de doğruysa bir yöntem çağrılır:
Yöntem bildirimindeki parametre sayısı dizideki bağımsız değişkenlerin sayısına eşittir (üyede
argsvarsayılan bağımsız değişkenler tanımlanmadığı veBindingFlags.OptionalParamBindingbelirtilmediği sürece).Her bağımsız değişkenin türü bağlayıcı tarafından parametrenin türüne dönüştürülebilir.
Bağlayıcı tüm eşleşen yöntemleri bulur. Bu yöntemler istenen bağlama türüne (BindingFlags değerler InvokeMethod, GetPropertyvb.) göre bulunur. Yöntem kümesi ada, bağımsız değişken sayısına ve bağlayıcıda tanımlanan bir arama değiştirici kümesine göre filtrelenmiştir.
Yöntem seçildikten sonra çağrılır. Erişilebilirlik bu noktada denetlendi. Arama, yöntemiyle ilişkili erişilebilirlik özniteliğine göre hangi yöntem kümesinin aranabileceğini denetleyebilir. Binder.BindToMethod sınıfının yöntemiBinder, çağrılacak yöntemi seçmekle sorumludur. Varsayılan bağlayıcı en belirli eşleşmeyi seçer.
Tam olarak güvenilen kod için erişim kısıtlamaları yoksayılır; yani özel oluşturucular, yöntemler, alanlar ve özellikler koda tam olarak güvenildiğinde Yansıma aracılığıyla erişilebilir ve çağrılabilir.
belirterek BindingFlags.SetFieldbir alanı belirli bir değere ayarlamak için kullanabilirsinizType.InvokeMember. Örneğin, C sınıfında F adlı bir genel örnek alanı ayarlamak istiyorsanız ve F ise aşağıdaki gibi bir String kod kullanabilirsiniz:
typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {"strings new value"}, null);
F bir String[]ise, aşağıdaki gibi bir kod kullanabilirsiniz:
typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {new String[]{"a","z","c","d"}}, null);
F alanını bu yeni diziye başlatacaktır. Değerin dizinini ve ardından aşağıdaki gibi bir kod kullanarak sonraki değeri sağlayarak dizide bir konum ayarlamak için de kullanabilirsiniz Type.InvokeMember :
typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {1, "b"}, null);
Bu, F'nin tuttuğu dizideki "z" dizesini "b" dizesi olarak değiştirir.
Bir IDispatch üyeyi çağırdığınızda, "[DispID=##]" dize biçimini kullanarak üye adı yerine DispID değerini belirtebilirsiniz. Örneğin, MyComMethod'un DispID değeri 3 ise, "MyComMethod" yerine "[DispID=3]" dizesini belirtebilirsiniz. Üyeyi DispID ile çağırmak, üyeyi ada göre aramaktan daha hızlıdır. Karmaşık toplama senaryolarında dispID bazen istenen üyeyi çağırmanın tek yoludur.
Not
.NET Framework 2.0 Service Pack 1'den başlayarak, çağıranın bayrağıyla verilmiş ReflectionPermission olması ve ortak olmayan üyelerin izin kümesinin çağıranın verme kümesiyle veya bunun bir alt kümesiyle ReflectionPermissionFlag.RestrictedMemberAccess sınırlı olması durumunda bu yöntem genel olmayan üyelere erişmek için kullanılabilir. (Bkz. Yansıma için GüvenlikLe İlgili Dikkat Edilmesi Gerekenler.)
Bu işlevselliği kullanmak için uygulamanızın .NET Framework 3.5 veya sonraki bir sürümü hedeflemesi gerekir.
Ayrıca bkz.
- String
- Binder
- DefaultBinder
- BindingFlags
- ParameterModifier
- ParameterAttributes
- CultureInfo
- ReflectionPermission
Şunlara uygulanır
InvokeMember(String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[])
- Kaynak:
- Type.cs
- Kaynak:
- Type.cs
- Kaynak:
- Type.cs
Türetilmiş bir sınıfta geçersiz kılındığında, belirtilen bağlama kısıtlamalarını kullanarak ve belirtilen bağımsız değişken listesi, değiştiriciler ve kültürle eşleşen belirtilen üyeyi çağırır.
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
Parametreler
- name
- String
Çağrılacak oluşturucunun, yöntemin, özelliğin veya alan üyesinin adını içeren dize.
-veya-
Varsayılan üyeyi çağırmak için boş bir dize ("").
-veya-
Üyeler için IDispatch , DispID'yi temsil eden bir dize, örneğin "[DispID=3]".
- invokeAttr
- BindingFlags
Aramanın nasıl yürütüleceğini belirten numaralandırma değerlerinin bit düzeyinde birleşimi. Erişim , , NonPublic, PrivateInvokeMethod, , GetFieldvb. gibi Publicbir BindingFlags erişim olabilir. Arama türü belirtilmemelidir. Arama türü atlanırsa kullanılırBindingFlags.PublicBindingFlags.Static | BindingFlags.Instance | .
- binder
- Binder
Aşırı yüklenmiş yöntem seçimi, bağımsız değişken türlerinin uygulatılması ve yansıtma yoluyla bir üyenin çağrılması işlemlerini içerebilen; özellikler kümesini tanımlayan ve bağlama işlemine olanak veren bir nesne.
-veya-
kullanmak DefaultBinderiçin null başvuru (Visual Basic'te Hiçbir şey). Değişken bağımsız değişkenleriyle yöntem aşırı yüklemelerini başarıyla çağırmak için bir Binder nesneyi açıkça tanımlamanın gerekebileceğini unutmayın.
- target
- Object
Belirtilen üyenin çağrıldığı nesne.
- args
- Object[]
Çağırmak için üyeye geçirilmesi gereken bağımsız değişkenleri içeren bir dizi.
- modifiers
- ParameterModifier[]
Dizideki ParameterModifier ilgili öğeyle args ilişkili öznitelikleri temsil eden bir nesne dizisi. Parametrenin ilişkili öznitelikleri üyenin imzasında depolanır.
Varsayılan bağlayıcı bu parametreyi yalnızca bir COM bileşeni çağırırken işler.
- culture
- CultureInfo
CultureInfo Kullanılacak genelleştirme yerel ayarını temsil eden nesne; sayısal dizeyi Double'a dönüştürmek gibi yerel ayara özgü dönüştürmeler için gerekli olabilir.
-veya-
Geçerli iş parçacığının kullanmak için null başvuru (Nothing Visual Basic'te CultureInfo).
- namedParameters
- String[]
Dizideki değerlerin args geçirildiği parametrelerin adlarını içeren bir dizi.
Döndürülenler
Çağrılan üyenin dönüş değerini temsil eden bir nesne.
Uygulamalar
Özel durumlar
invokeAttr içermez CreateInstance ve name şeklindedir null.
args ve modifiers aynı uzunlukta değildir.
-veya-
invokeAttr geçerli BindingFlags bir öznitelik değil.
-veya-
invokeAttr şu bağlama bayraklarından birini içermez: InvokeMethod, CreateInstance, GetField, SetField, GetProperty, veya SetProperty.
-veya-
invokeAttr, , GetField, SetFieldGetPropertyveya SetPropertyile birlikte InvokeMethodiçerirCreateInstance.
-veya-
invokeAttrhem SetFieldhem de GetField içerir.
-veya-
invokeAttrhem SetPropertyhem de GetProperty içerir.
-veya-
invokeAttrveya SetPropertyile birlikte SetField içerirInvokeMethod.
-veya-
invokeAttr içerir SetField ve args birden fazla öğeye sahiptir.
-veya-
Adlandırılmış parametre dizisi, bağımsız değişken dizisinden daha büyüktür.
-veya-
Bu yöntem bir COM nesnesinde çağrılır ve şu bağlama bayraklarından biri içinde geçirilmemiştir: BindingFlags.InvokeMethod, BindingFlags.GetProperty, BindingFlags.SetProperty, BindingFlags.PutDispPropertyveya BindingFlags.PutRefDispProperty.
-veya-
Adlandırılmış parametre dizilerinden biri olan nullbir dize içerir.
Belirtilen üye bir sınıf başlatıcısı.
Alan veya özellik bulunamıyor.
içindeki argsbağımsız değişkenlerle eşleşen hiçbir yöntem bulunamıyor.
-veya-
bağımsız değişken adlarının içinde sağlandığında namedParametershiçbir üye bulunamaz.
-veya-
Geçerli Type nesne, açık tür parametrelerini içeren bir türü temsil eder, yani ContainsGenericParameters döndürür true.
Belirtilen üye üzerinde targetçağrılamıyor.
Bağlama ölçütleri ile eşleşen birden fazla yöntem vardır.
tarafından name temsil edilen yöntemin bir veya daha fazla belirtilmemiş genel tür parametresi vardır. Başka bir ifadeyle, yöntemin ContainsGenericParameters özelliği döndürür true.
Açıklamalar
InvokeMember bir oluşturucu üyesini veya yöntem üyesini çağırır, bir özellik üyesi alır veya ayarlar, bir veri alanı üyesi alır veya ayarlar ya da bir dizi üyesinin öğesini alır veya ayarlar.
Not
Genel bir yöntemi çağırmak için kullanamazsınız InvokeMember .
Bir IDispatch üyeyi çağırdığınızda, "[DispID=##]" dize biçimini kullanarak üye adı yerine DispID belirtebilirsiniz. Örneğin, MyComMethod'un DispID değeri 3 ise, "MyComMethod" yerine "[DispID=3]" dizesini belirtebilirsiniz. Bir üyeyi DispID ile çağırmak, üyeyi ada göre aramaktan daha hızlıdır. Karmaşık toplama senaryolarında DispID bazen istenen üyeyi çağırmanın tek yoludur.
Varsayılan bağlayıcı veya işlemiyor ParameterModifier olsa da CultureInfo (modifiersve culture parametreleri), ve cultureişlemlerini gerçekleştiren modifiers özel bir bağlayıcı yazmak için soyut System.Reflection.Binder sınıfını kullanabilirsiniz.
ParameterModifier yalnızca COM birlikte çalışma aracılığıyla çağrılırken kullanılır ve yalnızca başvuru tarafından geçirilen parametreler işlenir.
Dizideki namedParameters her parametre, dizideki ilgili öğedeki args değeri alır. uzunluğu değerinden argsnamedParametersbüyükse, kalan bağımsız değişken değerleri sırayla geçirilir.
Dizi, namedParameters bir giriş dizisindeki bağımsız değişkenlerin sırasını değiştirmek için kullanılabilir. Örneğin, yöntemi M(string a, int b) (M(ByVal a As String, ByVal b As Integer)Visual Basic'te) ve giriş dizisi { 42, "x" }göz önünde bulundurulduğunda, için dizi sağlanmışsa namedParametersgiriş dizisi { "b", "a" } değiştirilmeden args geçirilebilir.
Aramaya hangi üyelerin dahil edilebileceğini tanımlamak için aşağıdaki BindingFlags filtre bayrakları kullanılabilir:
Genel üyeleri aramaya dahil etmek için belirtin
BindingFlags.Public.Genel olmayan üyeleri (özel, iç ve korumalı üyeler) aramaya dahil etmek için belirtin
BindingFlags.NonPublic.Statik üyeleri hiyerarşiye dahil etmek için belirtin
BindingFlags.FlattenHierarchy.
Aramanın çalışma şeklini değiştirmek için aşağıdaki BindingFlags değiştirici bayraklar kullanılabilir:
BindingFlags.IgnoreCaseöğesinin büyük/küçük harf durumunu yoksaymaknameiçin.BindingFlags.DeclaredOnlyyalnızca üzerinde Typebildirilen üyeleri aramak için, yalnızca devralınan üyeleri değil.
Üyeyle gerçekleştirilecek eylemi belirtmek için aşağıdaki BindingFlags çağırma bayrakları kullanılabilir:
CreateInstancebir oluşturucu çağırmak için.nameyoksayılır. Diğer çağırma bayraklarıyla geçerli değil.InvokeMethodbir yöntemi çağırmak, ancak bir oluşturucu veya tür başlatıcı çağırmak için. veyaSetPropertyileSetFieldgeçerli değil. tek başına belirtilirseInvokeMethod,BindingFlags.Public,BindingFlags.InstanceveBindingFlags.Staticotomatik olarak eklenir.GetFieldbir alanın değerini almak için. ileSetFieldgeçerli değil.SetFieldbir alanın değerini ayarlamak için. ileGetFieldgeçerli değil.GetPropertybir özellik almak için. ileSetPropertygeçerli değil.SetPropertybir özellik ayarlamak için. ileGetPropertygeçerli değil.
Daha fazla bilgi edinmek için bkz. System.Reflection.BindingFlags.
Aşağıdaki koşulların her ikisi de doğruysa bir yöntem çağrılır:
Yöntem bildirimindeki parametre sayısı dizideki
argsbağımsız değişkenlerin sayısına eşittir (varsayılan bağımsız değişkenler üyede tanımlanmadığı veBindingFlags.OptionalParamBindingbelirtilmediği sürece).Her bağımsız değişkenin türü bağlayıcı tarafından parametre türüne dönüştürülebilir.
Bağlayıcı tüm eşleşen yöntemleri bulur. Bu yöntemler istenenBindingFlags bağlama türüne (değerler InvokeMethod, GetPropertyvb.) göre bulunur. Yöntem kümesi ad, bağımsız değişken sayısı ve bağlayıcıda tanımlanan arama değiştiricileri kümesine göre filtrelenmiştir.
Yöntem seçildikten sonra çağrılır. Erişilebilirlik bu noktada denetlendi. Arama, yöntemiyle ilişkili erişilebilirlik özniteliğine göre hangi yöntem kümesinin aranabileceğini denetleyebilir. Binder.BindToMethod sınıfının yöntemiBinder, çağrılacak yöntemi seçmekle sorumludur. Varsayılan bağlayıcı en özel eşleşmeyi seçer.
InvokeMember varsayılan değerlere sahip parametrelerle yöntemleri çağırmak için kullanılabilir. Bu yöntemlere bağlanmak için Yansımanın belirtilmesi gerekir BindingFlags.OptionalParamBinding . Varsayılan değere sahip bir parametre için farklı bir değer sağlayabilir veya varsayılan değeri kullanmak için sağlayabilirsiniz Missing.Value .
Örneğin, MyMethod(int x, float y = 2.0) gibi bir yöntem düşünün. Bu yöntemi yalnızca myMethod(4) olarak ilk bağımsız değişkenle çağırmak için yukarıdaki bağlama bayraklarından birini geçirin ve ilk bağımsız değişken ve ikinci bağımsız değişken için 4 olmak üzere iki bağımsız değişken Missing.Value geçirin. kullanmadığınız Missing.Valuesürece, yöntemiyle Invoke isteğe bağlı parametreleri atlayamayabilirsiniz. Bunu yapmanız gerekiyorsa, bunun yerine kullanın InvokeMember .
Tam olarak güvenilen kod için erişim kısıtlamaları yoksayılır; yani özel oluşturucular, yöntemler, alanlar ve özellikler, koda tam olarak güvenildiğinde aracılığıyla System.Reflection erişilebilir ve çağrılabilir.
alanını belirterek BindingFlags.SetFieldbelirli bir değere ayarlamak için kullanabilirsinizType.InvokeMember. Örneğin, C sınıfında F adlı bir genel örnek alanı ayarlamak istiyorsanız ve F bir Stringise, aşağıdaki gibi bir kod kullanabilirsiniz:
typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {"strings new value"}, null, null, null);
F bir String[]ise, aşağıdaki gibi bir kod kullanabilirsiniz:
typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {new String[]{"a","z","c","d"}}, null, null, null);
F alanını bu yeni diziye başlatır. Değerinin dizinini ve ardından aşağıdaki gibi bir kod kullanarak bir sonraki değeri sağlayarak dizide bir konum ayarlamak için de kullanabilirsiniz Type.InvokeMember :
typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {1, "b"}, null, null, null);
Bu, F'nin tuttuğu dizideki "z" dizesini "b" dizesi olarak değiştirir.
Not
.NET Framework 2.0 Service Pack 1'den başlayarak, çağıranın bayrağıyla verilmiş ReflectionPermission olması ve ortak olmayan üyelerin izin kümesinin çağıranın verme kümesiyle veya bunun bir alt kümesiyle ReflectionPermissionFlag.RestrictedMemberAccess sınırlı olması durumunda bu yöntem genel olmayan üyelere erişmek için kullanılabilir. (Bkz. Yansıma için GüvenlikLe İlgili Dikkat Edilmesi Gerekenler.)
Bu işlevselliği kullanmak için uygulamanızın .NET Framework 3.5 veya sonraki bir sürümü hedeflemesi gerekir.
Ayrıca bkz.
- String
- Binder
- DefaultBinder
- BindingFlags
- ParameterModifier
- ParameterAttributes
- CultureInfo
- ReflectionPermission