سؤال

هل هناك طريقة لاستدعاء طريقة طاقتها باستخدام الانعكاس في. NET (2.0). لدي أحد التطبيقات التي instantiates الفئات التي تم مشتقة من الفئة الأساسية المشتركة بشكل حيوي. لأغراض التوافق، تحتوي هذه الفئة الأساسية 2 الأساليب التي تحمل الاسم نفسه، واحدة مع المعلمات، واحد دون. ولست بحاجة إلى استدعاء الأسلوب parameterless عبر طريقة استدعاء. الآن، كل ما تحصل عليه هو خطأ تقول لي أن أحاول الاتصال طريقة غامضة.

نعم، أنا <م> قد مجرد يلقي الكائن كما مثيل الفئة الأساسية بلدي واستدعاء الأسلوب أحتاج. في نهاية المطاف أن <م> سوف يحدث، ولكن في الوقت الراهن، والمضاعفات الداخلية لا تسمح بذلك.

وأي مساعدة ستكون كبيرة! شكرا.

هل كانت مفيدة؟

المحلول

لديك لتحديد الطريقة التي تريدها:

class SomeType 
{
    void Foo(int size, string bar) { }
    void Foo() { }
}

SomeType obj = new SomeType();
// call with int and string arguments
obj.GetType()
    .GetMethod("Foo", new Type[] { typeof(int), typeof(string) })
    .Invoke(obj, new object[] { 42, "Hello" });
// call without arguments
obj.GetType()
    .GetMethod("Foo", new Type[0])
    .Invoke(obj, new object[0]);

نصائح أخرى

نعم. عند استدعاء الأسلوب تمرير المعلمات التي تتناسب مع الحمل الزائد الذي تريده.

وعلى سبيل المثال:

Type tp = myInstance.GetType();

//call parameter-free overload
tp.InvokeMember( "methodName", BindingFlags.InvokeMethod, 
   Type.DefaultBinder, myInstance, new object[0] );

//call parameter-ed overload
tp.InvokeMember( "methodName", BindingFlags.InvokeMethod, 
   Type.DefaultBinder, myInstance, new { param1, param2 } );

إذا كنت تفعل ذلك على العكس من ذلك يجب الحرص على أن تحصل على حق واحد (أي من خلال إيجاد memberinfo في الدعوة استدعاء.) - الحمل الزائد خالية من المعلمة قد تكون وجدت أولا

استخدم الزائد GetMethod أن يأخذ System.Type []، وتمرير فارغة نوع []؛

typeof ( Class ).GetMethod ( "Method", new Type [ 0 ] { } ).Invoke ( instance, null );
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top