Практическое использование TypedReference

Есть ли практическое применение TypedReference структура, которую вы бы на самом деле использовали в реальном коде?

РЕДАКТИРОВАТЬ:.Net Framework использует их в перегрузках Console.WriteLine а также String.Concat которые строят массив из __arglist параметр и передать его в нормальное состояние params перегрузки. Почему существуют эти перегрузки?

2 ответа

Решение

Есть ли практическое использование структуры TypedReference, которую вы бы фактически использовали в реальном коде?

Да. Я бы использовал их, если бы мне нужна была совместимость с вариадическими методами в стиле Си.

Почему существуют эти перегрузки?

Они существуют для взаимодействия с абонентами, которые любят использовать вариадические методы в стиле 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!!
Другие вопросы по тегам