سؤال

أنا حاليا البحث في الطبعة الثانية من C # في العمق، ومحاولة تطبيق "المخازن المؤقتة البروتوكول الحيوية" - أي مستوى من الدعم الديناميكي أعلى مكتبة بروتوكول البروتوكول الخاصة بي. على هذا النحو، لدي DlrMessage اكتب مشتق من DynamicObject. وبعد بعد قليل من اللعب حول لقد تمكنت من الحصول عليها للاستجابة للخصائص البسيطة مع رمز قليل بشكل ملحوظ، ولكن أريد أن أذهب كثيرا - وأن أفهم حقا ما يجري.

حتى الآن لم أجد أي تفسيرات جيدة من DLR - والكثير من المشاركات المدونة قديمة الآن قديمة الآن، حيث تغيرت الأمور (أعتقد) بين CTP السابقة و .NET 4.0 Beta 1. وثائق MSDN ل Dynamicobject هو الحد الأدنى جدا في الوقت الراهن.

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

هل هناك أي مصادر نهائية وحديثة للوثائق يجب أن أعرفها؟ أنا أدرك هذا الجزء من الكتابة عن تقنية جديدة يكون الاستكشاف، ولكن يد المساعدة سيكون موضع تقدير :)

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

المحلول

أفضل مصدر وجدته ويقرأ بشكل متكرر هو السنوات الأخيرة التي يستحق من المشاركات chris burrow مدونته.

هناك أيضا صفحة وثائق DLR الرسمية وهو خارج موقع DLR الرئيسي.

نصائح أخرى

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

هناك مبلغ عادل داخل مقاطع الفيديو PDC.

http://channel9.msdn.com/pdc2008/tl44/

http://channel9.msdn.com/pdc2008/tl10/

يتحدث هذا المقال عن كيفية عمل DLR مع Ironpython:http://msdn.microsoft.com/en-us/magazine/cc163344.aspx.

هناك كمية صغيرة جدا في معاينة مجموعة التدريب في: http://www.microsoft.com/downloads/details.aspx؟familyid=752CB725-969B-4732-A383-ed5740F02E93&displaylang=en.

أتمنى أن يساعدك هذا

اليكيال

سيقول DynamicObject الافتراضي "عكس الانعكاس" إذا كانت تجربتك * وظائف إرجاع False. لذلك يمكنك بالفعل ترث وإضافة خصائص / حقول / طرق إلى الفئة الفرعية الخاصة بك والتي سيتم التعامل معها جميعها عن طريق الانعكاس إذا كان المسار الديناميكي لا يقوم بالبحث عن البحث.

الذهاب أكثر في العمق قد ترغب في إلقاء نظرة على idynamicmetaobjectprovider. عند هذا المستوى الأدنى، فإن الطريقة التي تقولها أن تراجع للتفكير هي استدعاء طريقة التراجع * في DynamicmetaBjetBindBinder. ثم يتيح ذلك لغة الاتصال لتوفير القرار. يمكنك بعد ذلك إرجاع هذا AST أو إنشاءه في AST Whcih أكبر. تراجع أساسا * دعك تحصل على AST أن لغة الاتصال ستنتج بما في ذلك الخطأ الصحيح (استثناء، غير محدد في JS، إلخ ...).

الطريقة التي يقوم بها Dynamicobject هي عدم الانعكاس هو أنه يستدعي في الواقع طريقة تراجع Binder's * مرتين. في المرة الأولى التي يسقط فيها دون معلمة "errorsuggestion". هذا يحصل على الخطأ أو AST الذي تم بناؤه باستخدام انعكاس. ثم تنتج AST وهو شيء مثل:

if(TryGetMember("name", out value)) {
   return value;
} else {
   return resultOffallback;
}

ثم يأخذ هذا الجمع بين AST ويعيد ذلك في الواقع كإشعار الخطأ للمكان في التراجع الثاني. يجب أن يحترم الموثق هذا الأخشد إذا كان الربط غير ناجح. ولكن إذا كان عضو .NET هو حاضر، فسيتم إلقاء الأخطاء errorsugggestion. وأخيرا إذا كانت اللغة لا تعرف ما إذا كانت الربط ناجحة (مثل اللغة تحتوي على "طريقة مفقودة" ميزة النوع)، فيمكنها الجمع مرة أخرى بين الشيكات الديناميكية ASTS. لذا فإن استخدام Fallback، لا يمكنك أن تقول فقط Do Do الانعكاس ولكن يمكنك أيضا اختيار ما إذا كان أعضاء ديناميكي أو ثابت لهم الأسبقية.

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