是否有的 TypedReference 结构的任何实际用途你会在真正的代码实际上使用?

修改:.NET框架使用它们,其中从Console.WriteLine参数建立一个数组,并把它传递给正常String.Concat过载__arglistparams的过载。这些重载为什么存在?

有帮助吗?

解决方案

  

有没有你实际上在真正的代码中使用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