ما هو الاستخدام العملي "ديناميكية" متغير في C# 4.0?

StackOverflow https://stackoverflow.com/questions/253460

  •  05-07-2019
  •  | 
  •  

سؤال

ما هو استخدامها إذا كان عند استدعاء الأسلوب ربما لا وجود لها ؟

هل هذا يعني أنك سوف تكون قادرة على حيوي إنشاء طريقة ديناميكية الكائن ؟

ما هي فائدة عملية من هذا ؟

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

المحلول

حقا أنك لن تكون قادرة على بشكل حيوي إنشاء طريقة - ولكن يمكنك الحصول على تنفيذ IDynamicMetaObject (في كثير من الأحيان من خلال توسيع DynamicObject) للرد كما لو كان طريقة موجودة.

الاستخدامات:

  • البرمجة ضد كائنات COM مع ضعف API (مثلا ، مكتب)
  • داعيا إلى اللغات الديناميكية مثل روبي/Python
  • قد يجعل "حجر" الكائنات - تخيل XPath مثل الاستعلام ولكن عبر طريقة/خاصية المكالمات مثلا document.RootElement.Person[5].Name["Attribute"]
  • لا شك أن الكثير ما زال علينا أن نفكر :)

نصائح أخرى

وأولا وقبل كل شيء، لا يمكن استخدامه الآن. انها جزء من C # 4، الذي سيصدر في وقت ما في المستقبل.

وأساسا، انها لكائن، التي لن تكون معروفة حتى وقت التشغيل خصائص. ربما يأتي من كائن COM. ربما انها "تعرف على الكائن ذبابة" كما تصفون (على الرغم من أنني لا أعتقد أن هناك تسهيلات لإنشاء تلك بعد أو المخطط لها).

وانها بدلا مثل System.Object، إلا أنه يسمح لك لاستدعاء الأساليب أن المترجم لا يعرفون، وأن وقت الأرقام على كيفية الاتصال بها.

اثنين biggies أستطيع أن أفكر في بطة الكتابة القدرة على استخدام C# بوصفها لغة البرمجة في تطبيقات مماثلة جافا سكريبت بيثون.آخر يجعلني المسيل للدموع قليلا.

وكما أنها تفكر في شكل مبسط للتفكر. بدلا من هذا:

object value = GetSomeObject();
Method method = value.GetType().GetMethod("DoSomething");
method.Invoke(value, new object[] { 1, 2, 3 });

ويمكنك الحصول على هذا:

IDynamicObject value = GetSomeObject();
value.DoSomething(1, 2, 3);

وأرى عدة أطر ORM ديناميكية يتم كتابتها. أو هيك كتابة واحدة نفسك.

وأنا أتفق مع جون السكيت، قد تشاهد بعض الطرق للاهتمام استكشاف الكائنات. ربما مع محددات مثل مسج.

واستدعاء COM والدعوة الحيوي اللغات.

وانا اتطلع لرؤية ما إذا كان هناك طريقة للقيام روبي مثل missing_method.

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