DynamicMethod.Invoke 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.
Belirtilen kültür bilgileriyle belirtilen bağlayıcının kısıtlamaları altında belirtilen parametreleri kullanarak dinamik yöntemi çağırır.
public:
override System::Object ^ Invoke(System::Object ^ obj, System::Reflection::BindingFlags invokeAttr, System::Reflection::Binder ^ binder, cli::array <System::Object ^> ^ parameters, System::Globalization::CultureInfo ^ culture);
public override object? Invoke(object? obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder? binder, object?[]? parameters, System.Globalization.CultureInfo? culture);
public override object Invoke(object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, object[] parameters, System.Globalization.CultureInfo culture);
override this.Invoke : obj * System.Reflection.BindingFlags * System.Reflection.Binder * obj[] * System.Globalization.CultureInfo -> obj
Public Overrides Function Invoke (obj As Object, invokeAttr As BindingFlags, binder As Binder, parameters As Object(), culture As CultureInfo) As Object
Parametreler
- obj
- Object
Bu parametre statik olduğundan dinamik yöntemler için yoksayılır.
null belirtin.
- invokeAttr
- BindingFlags
Değerlerin bit düzeyinde birleşimi BindingFlags .
- binder
- Binder
Binder Bağlamayı, bağımsız değişken türlerini zorlamayı, üyeleri çağırmayı ve yansıma aracılığıyla nesnelerin alınmasını MemberInfo sağlayan nesne. ise bindernull, varsayılan bağlayıcı kullanılır. Diğer ayrıntılar için bkz. Binder.
- parameters
- Object[]
Bağımsız değişken listesi. Bu, çağrılacak yöntemin parametreleriyle aynı sayı, düzen ve türe sahip bir bağımsız değişken dizisidir. Parametre yoksa bu parametre olmalıdır null.
- culture
- CultureInfo
Türlerin CultureInfo zorlamasını idare etmek için kullanılan bir örneği. Bu isenullCultureInfo, geçerli iş parçacığı için kullanılır. Örneğin, 1000'i temsil eden bir String değeri doğru bir Double değere dönüştürmek için bu bilgi gereklidir, çünkü 1000 farklı kültürler tarafından farklı temsil edilir.
Döndürülenler
Object Çağrılan yöntemin dönüş değerini içeren.
Özel durumlar
VarArgs Çağırma kuralı desteklenmez.
içindeki parameters öğe sayısı, dinamik yöntemdeki parametre sayısıyla eşleşmiyor.
bir veya daha fazla öğesinin parameters türü, dinamik yöntemin karşılık gelen parametresinin türüyle eşleşmiyor.
Dinamik yöntem bir modülle ilişkilendirilir, anonim olarak barındırılmaz ve skipVisibilityfalse olarak ayarlanmıştır, ancak dinamik yöntem public veya internal (Visual Basic Friend) olmayan üyelere erişir.
-veya-
Dinamik yöntem anonim olarak barındırılır ve olarak ayarlanmış skipVisibilityolarak false oluşturulur, ancak olmayan publicüyelere erişir.
-veya-
Dinamik yöntem, tanımlanamaz kod içeriyor. DynamicMethod için Açıklamalar bölümündeki "Doğrulama" kısmına bakın.
Örnekler
Aşağıdaki kod örneği, US-English kültürünü kullanarak tam bağlamaya sahip bir dinamik yöntem çağırır. Bu kod örneği, sınıfı için DynamicMethod sağlanan daha büyük bir örneğin parçasıdır.
Console.WriteLine("\r\nUse the Invoke method to execute the dynamic method:");
// Create an array of arguments to use with the Invoke method.
object[] invokeArgs = {"\r\nHello, World!", 42};
// Invoke the dynamic method using the arguments. This is much
// slower than using the delegate, because you must create an
// array to contain the arguments, and value-type arguments
// must be boxed.
object objRet = hello.Invoke(null, BindingFlags.ExactBinding, null, invokeArgs, new CultureInfo("en-us"));
Console.WriteLine("hello.Invoke returned: " + objRet);
Console.WriteLine(vbCrLf & "Use the Invoke method to execute the dynamic method:")
' Create an array of arguments to use with the Invoke method.
Dim invokeArgs() As Object = {vbCrLf & "Hello, World!", 42}
' Invoke the dynamic method using the arguments. This is much
' slower than using the delegate, because you must create an
' array to contain the arguments, and value-type arguments
' must be boxed.
Dim objRet As Object = hello.Invoke(Nothing, _
BindingFlags.ExactBinding, Nothing, invokeArgs, _
New CultureInfo("en-us"))
Console.WriteLine("hello.Invoke returned: {0}", objRet)
Açıklamalar
Listelenen özel durumlara ek olarak, çağıran kod dinamik yöntem tarafından oluşan özel durumları yakalamak için hazır olmalıdır.
CreateDelegate yöntemi tarafından oluşturulan bir temsilci aracılığıyla dinamik bir yöntem yürütmek, Invoke yöntemiyle yürütmekten daha etkilidir.
Invoke metodu veya CreateDelegate metodu çağırmak, dinamik metodu tamamlar. Dinamik yöntemi değiştirmeye yönelik parametre tanımlarını değiştirme veya daha fazla Microsoft ara dili (MSIL) yayma teşebbüsleri görmezden gelinir; herhangi bir istisna durumu atılmaz.
Tüm dinamik yöntemler statiktir, bu nedenle obj parametre her zaman yoksayılır. Bir dinamik yöntemi örnek yöntemi gibi ele almak için, bir nesne örneği alan CreateDelegate(Type, Object) aşırı yüklemesini kullanın.
Dinamik yöntemin parametresi yoksa değeri parameters olmalıdır null. Aksi takdirde parametre dizisindeki öğelerin sayısı, türü ve sırası, dinamik yöntemin parametre sayısı, türü ve sırası ile aynı olmalıdır.
Note
Bu yöntem aşırı yüklemesi, Invoke(Object, Object[]) sınıfından devralınan MethodBase yöntem aşırı yüklemesi tarafından çağrılır, bu nedenle yukarıdaki açıklamalar her iki aşırı yükleme için de geçerlidir.
Bu yöntem doğrudan izin talep etmez, ancak dinamik yöntemin çağrılması, yönteme bağlı olarak güvenlik taleplerine neden olabilir. Örneğin, restrictedSkipVisibility parametre setiyle oluşturulan anonim olarak barındırılan dinamik yöntemler için herhangi bir talep yapılmaz. Öte yandan, hedef derlemenin gizli bir üyesine erişebilmesi için restrictedSkipVisibility olarak ayarlanmış bir yöntem true oluşturursanız, yöntem hedef derlemenin izinlerine ve ReflectionPermission bayrağına ReflectionPermissionFlag.MemberAccess sahip bir isteğe neden olur.