هل الكلمة ديناميكية في C تصريح # 4 عمليات معينة مستحيلة سابقا مع الأدوية؟

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

  •  06-07-2019
  •  | 
  •  

سؤال

والكلمة 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(...);

والوراثة والتأمل: لا حقا معا بشكل أفضل، ولكن إذا كنت في حاجة إليها ...

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