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 olduklarından 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 nesneleri yansıma aracılığıyla almayı MemberInfo sağlayan bir nesne. ise binder
null
, 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ı, sıra 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 örnek. Bu ise null
, CultureInfo geçerli iş parçacığı için kullanılır. Örneğin, 1000'i temsil eden bir String değeri doğru bir şekilde 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ı desteklenmiyor.
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 ilgili parametresinin türüyle eşleşmiyor.
Dinamik yöntem bir modülle ilişkilendirilir, anonim olarak barındırılmaz ve olarak ayarlanmış olarak skipVisibility
oluşturulur, ancak dinamik yöntem veya internal
(Friend
Visual Basic'te) olmayan public
üyelere erişir.false
-veya-
Dinamik yöntem anonim olarak barındırılır ve olarak ayarlanmış false
olarak skipVisibility
oluşturulur, ancak olmayan public
üyelere erişir.
-veya-
Dinamik yöntem, doğrulayınamayan kod içeriyor. için DynamicMethodaçıklamalar bölümündeki "Doğrulama" bölümüne 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.
array<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(nullptr, BindingFlags::ExactBinding, nullptr, invokeArgs, gcnew CultureInfo("en-us"));
Console::WriteLine("hello.Invoke returned: " + objRet);
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ırlanmalıdır.
Yöntemi tarafından CreateDelegate oluşturulan bir temsilciyle dinamik yöntem yürütmek, yöntemiyle Invoke yürütmekten daha verimlidir.
Invoke yöntemini veya yöntemini çağırmak CreateDelegate dinamik yöntemi tamamlar. Parametre tanımlarını değiştirme veya daha fazla Microsoft ara dili (MSIL) yayma gibi dinamik yöntemi değiştirme girişimleri yoksayılır; hiçbir özel durum atılır.
Tüm dinamik yöntemler statiktir, bu nedenle obj
parametre her zaman yoksayılır. Bir dinamik yöntemi bir örnek yöntemiymiş gibi işlemek için bir nesne örneğini CreateDelegate(Type, Object) alan aşırı yüklemeyi 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.
Not
Bu yöntem aşırı yüklemesi, sınıfından devralınan Invoke(Object, Object[])MethodBase yöntem aşırı yüklemesi tarafından çağrılır, bu nedenle yukarıdaki açıklamalar her iki aşırı yüklemeye de uygulanır.
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, parametresi olarak ayarlanmış şekilde oluşturulan restrictedSkipVisibility
anonim olarak barındırılan dinamik yöntemler için herhangi bir talepte bulunulmamalıdır false
. Öte yandan, hedef derlemenin gizli bir üyesine erişebilmesi için true
olarak ayarlanmış bir yöntem restrictedSkipVisibility
oluşturursanız, yöntem hedef derlemenin izinlerine ve ReflectionPermission bayrağına ReflectionPermissionFlag.MemberAccess sahip bir isteğe neden olur.
Not
2.0 .NET Framework önce bu yöntem bayrağıyla birlikte gerekli.ReflectionPermissionMemberAccess