هل ستؤدي الكلمة الرئيسية الديناميكية في طرق تمديد C#4؟
-
06-07-2019 - |
سؤال
انا الاستماع إلى الحديث حول ج#4'س dynamic
الكلمة الرئيسية وأنا أتساءل ... هل ستكون هذه الميزة متعامدة مع ميزات .NET الأخرى ، على سبيل المثال هل ستدعم طرق تمديد تكنولوجيا المعلومات؟
public static class StrExtension {
public static string twice(this string str) { return str + str; }
}
...
dynamic x = "Yo";
x.twice(); // will this work?
ملحوظة: تم طرح هذا السؤال قبل شحن C#4 وهذا هو السبب في أنه تم صياغته في المستقبل.
المحلول
من "ميزات جديدة في C# 4" Word Doc:
لن يتمكن البحث الديناميكي من العثور على طرق تمديد. ما إذا كانت طرق التمديد تنطبق أو لا تعتمد على السياق الثابت للمكالمة (أي التي تحدث استخدام الجمل) ، ولا يتم الاحتفاظ بمعلومات السياق هذه حاليًا كجزء من الحمولة النافعة.
نصائح أخرى
هذا العمل الذي أجده مثيرًا للاهتمام على الأقل ...
public static class StrExtension
{
public static string twice(this string str) { return str + str; }
}
...
dynamic x = "Yo";
StrExtension.twice(x);
ومع ذلك ، إذا كان المترجم يمكن أن يجد طريقة التمديد الصحيحة في وقت الترجمة ، فأنا لا أرى لماذا لا يمكن أن يحزم مجموعة من أساليب التمديد في وقت التشغيل؟ سيكون مثل طاولة V للطرق غير الأعضاء.
تعديل:
ان هذا رائع... http://www2.research.att.com/~bs/multimethods.pdf
لا يمكن أن تعمل ، تعمل أساليب التمديد اعتمادًا على وجود مساحة الاسم في الملف ، وبقدر ما أعرف ، ليس لدى Msil أي فكرة عن الملفات بما في ذلك مساحات الأسماء.
يمكنك إنشاء طريقة تمديد ل هدف وتعيينه إلى متحرك:
public static void MyExt(this object o) {
dynamic d = o;
d.myProp = "foo";
}
ونسميها هكذا:
ClassWithMyProp x;
x.MyExt();