سؤال

وC # 3.0 أساليب الإرشاد إضافة ملحقات لنوع قاعدة صنع داعيا تلك الطريقة على جميع <م> الحالات من هذا النوع القانونية.

والآن، وجافا سكريبت وأنا أعلم الأدوات IDispatchEx من خلالها انه من الممكن إضافة أساليب لحالة محددة.

ولكن كيف يمكنني إضافة مجموعة من الأساليب ل"المثال" من الدرجة C #؟ أعرف أن هذا هو الحيوي مقابل ساكنة اللغات الأراضي الحرب المقدسة. :) اسمحوا لي أن أوضح نيتي NOT ذلك.

وأريد فقط أن تكون قادرة على إضافة مجموعة من الأحداث إلى واجهة اعتمادا على الطبقة تنفيذ تلك الواجهة.

وكنت قادرا على القيام بذلك باستخدام الوراثة

inteface ISample<T> { T SupportedEvents; }  

class Sample : ISample<UIWidgetEvent>   {   }  
class Sample2 : ISample<NonVisualUIWidget> { }

class UIWidgetEvent { public EventHandler Clicked; }  
class NonVisualUIWidget {public EventHandler Expired;}

class TestSample
{  
    public void Test()
    {  
        new Sample().SupportedEvents.Clicked += ...
        new Sample2().SupportedEvents.Expired += ...
    }  
}  

وبعد ذلك لم أكن أحب SupportedEvents أريد أن أكون قادرا على القول

new Sample().Clicked +=...

وثم فكرت جافا سكريبت (وأنا أعلم C# لا JS:)) ... وIDispatchEx، IL Weaving، Reflection.Emit الخ الخ والفكر قد يكون هناك طريقة للقيام بذلك ... [دعم وقت التصميم سيكون من الرائع ولكن أستطيع العيش دون]

ونعم، وأنا ربما يمكن أن تفعل هذا "زيادة سبيل المثال" مع نمط الزوار. [ليس متأكدا مما إذا كان يمكن الحصول على السكر syntatic على الرغم]

وتعليقات؟

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

المحلول

حسنا، هل يمكن إنشاء مثيل DynamicMethod لطرق "الجديدة"، ولكن ربط ثابت لهم مثيل موجود في وقت التشغيل لا يعمل يرجع ذلك إلى حقيقة أنه سيكون سهل لا ترجمة.

أنت <م> قد (لم أحاول ذلك) تكون قادرة على ينبعث أكواد العمليات في تجميع في الذاكرة، ولكن هذا عن مناطق بعيدة عن كونها "حلوة نحوي"، كما يمكنك الحصول على ( سوف تنطوي على الكثير من التفكير ويدعو InvokeMember، وأود أن أعتقد)

وكما قد يكون من المفيد النظر في أساليب الإرشاد - على الرغم من أنني لم يحاكم ربط الأحداث أو أساليب مثل الحدث عبر طرق الإرشاد ... وهم 3.5 فقط، لذلك التي قد تحد لك

واجمل المظهر، "محض C #" التنفيذ ربما شيء مشابه جدا لما كنت قد حصلت بالفعل مع الإعداد / واجهة عام ...

وبصراحة، إذا كنت تبحث عن شيء مع "الدعم الديناميكي" صحيح مثل هذا، كنت تفعل هذا النوع من الاشياء في اللغات DLR قادرة (مثل و IronPython) وندعو إلى أنه من هاتفك C # الاشياء.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top