سؤال

ولقد نفذت IDynamicObject في C # 4، إرجاع MetaObject فرعية مخصصة التي لا جالبة الملكية بسيطة / اضع إرسال إلى القاموس. لا علم الصواريخ.

إذا أفعل هذا:

dynamic foo = new DynamicFoo();

foo.Name = "Joe";

foo.Name = "Fred";

Console.WriteLine(foo.Name);

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

وأنا أعلم أن DLR لا التخزين المؤقت callsite، لكني افترض أن ذلك لا ينطبق هنا. أحد يعرف ما الذي يحدث؟

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

المحلول

ومهما MetaObject كنت عائدا من (ربط) SetMember سوف يكون مؤقتا وإعادة استخدامها في هذه الحالة. لديك 2 المواقع الديناميكية به مجموعات. والدعوة 1ST مؤقتا النتيجة في مخبأ L2 التي الموقع 2ND سوف تلتقط قبل أن يطلب منك أن إنتاج قاعدة جديدة.

وهكذا كل ما MetaObject كنت احتياجات العائدين لتشمل شجرة التعبير التي سيتم تحديث القيمة. على سبيل المثال يجب أن نفعل شيئا مثل:

والعودة MetaObject الجديدة (     Expression.AssignProperty (this.Expression، value.Expression)،     Restrictions.TypeRestriction (this.Expression، this.Value.GetType ())؛

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