代码之家  ›  专栏  ›  技术社区  ›  SLaks

类型引用的实际应用

  •  24
  • SLaks  · 技术社区  · 15 年前

    TypedReference 在实际代码中实际使用的结构?

    编辑 :Net framework在的重载中使用它们 Console.WriteLine String.Concat __arglist 参数,并将其传递给法线 params 超载。为什么会存在这些重载?

    2 回复  |  直到 15 年前
        1
  •  20
  •   konrad.kruczynski    8 年前

    对如果我需要与C型变量方法的互操作性,我会使用它们。

    为什么会存在这些重载?

    它们的存在是为了与喜欢使用C型变量方法的调用方进行互操作。

        2
  •  16
  •   Abel    12 年前

    这似乎是一个非常古老的问题,但我想再添加一个用例:当您有一个结构并希望通过反射设置其变量时,您将始终对装箱的值进行操作,并且永远不会更改原始值。这是没有用的:

    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!!
    
    推荐文章