هل ستؤدي الكلمة الرئيسية الديناميكية في طرق تمديد C#4؟

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

سؤال

انا الاستماع إلى الحديث حول ج#4dynamic الكلمة الرئيسية وأنا أتساءل ... هل ستكون هذه الميزة متعامدة مع ميزات .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();
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top