سؤال

هل هناك أي استخدامات عملية لل TypedReference بنية كنت تستخدم في الواقع في الكود الحقيقي؟

تعديل: يستخدمها .NET Framework في الحمل الزائد Console.WriteLine و String.Concat الذي بناء صفيف من __arglist المعلمة وتمريرها إلى الطبيعي params الزائد. لماذا هذه الحمل الزائد موجودة؟

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

المحلول

هل هناك أي استخدامات عملية من بنية TypedRefreence التي ستستخدمها بالفعل في الكود الحقيقي؟

نعم. كنت أستخدمها إذا كنت بحاجة إلى قابلية التشغيل البيني مع طرق Variadic Style C-Style.

لماذا هذه الحمل الزائد موجودة؟

وهي موجودة من أجل قابلية التشغيل البيني مع المتصلين الذين يحبون استخدام طرق Variadic Style C..

نصائح أخرى

يبدو أن هذا سؤال قديم للغاية، ولكن أود أن أضيف حالة استخدام واحدة أخرى: عندما يكون لديك بنية وترغب في تعيين متغيرها من خلال التفكير، فسوف تعمل دائما على القيمة المحتملة وعدم تغيير الأصل. هذا عديم الفائدة:

TestFields fields = new TestFields { MaxValue = 1234 };
FieldInfo info = typeof(TestFields).GetField("MaxValue");
info.SetValue(fields, 4096);

// result: fields.MaxValue is still 1234!!

يمكن علاج هذا مع الملاكمة الضمنية، ولكن بعد ذلك تفقد السلامة من النوع. بدلا من ذلك، يمكنك إصلاح هذا مع TypedParameter:

TestFields fields = new TestFields { MaxValue = 1234 };
FieldInfo info = fields.GetType().GetField("MaxValue");

TypedReference reference = __makeref(fields);
info.SetValueDirect(reference, 4096);

// result: fields.MaxValue is now indeed 4096!!
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top