هل الكلمة ديناميكية في C تصريح # 4 عمليات معينة مستحيلة سابقا مع الأدوية؟
سؤال
والكلمة dynamic
في C # 4 يقدم وسائل جديدة للعمل مع الكائنات التي لم تكن ممكنة من قبل. كيف يفعل هذا التداخل مع الأدوية؟ على وجه التحديد، هل هناك عمليات من شأنها أن تكون مفيدة محتملة والتي هي الآن القانونية وصالحة؟
وعلى سبيل المثال، لم يكن هذا ممكنا الآن:
// Use a type whose value is known only at runtime.
Type t = ...;
List<t> l = new List<t>();
// ... (add some items to the list)
t first = l[0];
هل هناك وسيلة لتحقيق شيء مماثل مرة واحدة dynamic
متاح؟
المحلول
وديناميكية لا تساعدك كثيرا هنا. ما زالت هناك حاجة لاستخدام Type.GetGenericTypeDefinition()
/ MakeGenericType()
لإنشاء الكائن في البداية، وهو أقل من ممتعة.
إذا فهمت بشكل صحيح، ما سوف تفعله هو دينامية مرة واحدة لديك نوع بناؤها بهذه الطريقة، وستجعل من السهل التعامل معها. على سبيل المثال، <م> أنت م> تعرف لديك قائمة من نوع ما، حتى لو كان المترجم لا. حتى إذا كنت قد كلف تلك القائمة إلى متغير ديناميكي يمكنك أن تفعل أشياء مثل تدعو انها طريقة .Add()
ويجب أن الدعوة لحل في وقت التشغيل.
ملحوظة أنني لم ألعب مع هذا بعد شخصيا، ورغم ذلك حتى محاولة ذلك بنفسك هذا لا يزال مجرد إشاعة.
نصائح أخرى
ويمكنك أن تفعل ذلك الآن، على الرغم من أنك يجب أن تريد ذلك حقا. ملاحظة:
Type t = ...;
typeof(List<>)
.MakeGenericType(t)
.GetMethod(...);
والوراثة والتأمل: لا حقا معا بشكل أفضل، ولكن إذا كنت في حاجة إليها ...