Вопрос

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

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

Это было полезно?

Решение

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

Да.Я бы использовал их, если бы мне нужна была совместимость с вариационными методами C-стиля.

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

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