gpt4 book ai didi

c# - ParameterInfo 属性、属性和方法的 out ref 参数

转载 作者:太空狗 更新时间:2023-10-29 21:54:36 26 4
gpt4 key购买 nike

好吧,我对 ParameterInfo 的属性感到困惑类(class)。
不幸的是,文档不是很清楚:示例展示了如何构建方法,但没有展示这些方法在 C# 中的外观。

甘蔗有人详细介绍了这些属性:

  • DefaultValue
  • HasDefaultValue
  • IsIn
  • IsLcid
  • IsOptional
  • IsOut
  • IsRetval

  • 哪种组合会导致什么方法参数。
    我做了一个简单的程序,它给出了以下输出:

    方法名称 M1 void M1(object param)IL 签名: .method public hidebysig instance void M1(object param) cil managed方法参数说明:
    通过引用传递 False
    HasDefaultValue=False
    是在=假
    IsLcid=假
    IsOptional=False
    输出=假
    IsRetVal=假

    方法名称 M2 void M2(object param = null)IL 签名 .method public hidebysig instance void M2([opt] object param) cil managed方法参数说明:
    通过引用传递 False
    HasDefaultValue=True
    默认值=空
    是在=假
    IsLcid=假
    IsOptional=True
    输出=假
    IsRetVal=假

    方法名称 M3 void M3(out object param)IL 签名 .method public hidebysig instance void M3([out] object& param) cil managed方法参数说明:
    已通过 引用 True
    HasDefaultValue=False
    是在=假
    IsLcid=假
    IsOptional=False
    IsOut=True
    IsRetVal=假

    方法名称 M4 void M4(ref object param)IL 签名 .method public hidebysig instance void M4(object& param) cil managed方法参数说明:
    已通过 引用 True
    HasDefaultValue=False
    是在=假
    IsLcid=假
    IsOptional=False
    输出=假
    IsRetVal=假

    方法名称 M5 void M5([In] object param)IL 签名 .method public hidebysig instance void M5([in] object param) cil managed方法参数说明:
    通过引用传递 False
    HasDefaultValue=False
    IsIn=True
    IsLcid=假
    IsOptional=False
    输出=假
    IsRetVal=假

    方法名称 M6 void M6([Out] object param)IL 签名 .method public hidebysig instance void M6([out] object param) cil managed方法参数说明:
    通过引用传递 False
    HasDefaultValue=False
    是在=假
    IsLcid=假
    IsOptional=False
    IsOut=True
    IsRetVal=假

    方法名称 M7 void M7([Out] out object param)IL 签名 .method public hidebysig instance void M7([out] object& param) cil managed方法参数说明:
    已通过 引用 True
    HasDefaultValue=False
    是在=假
    IsLcid=假
    IsOptional=False
    IsOut=True
    IsRetVal=假

    方法名称 M8 void M8([DefaultValue(null)] object param)IL 签名 .method public hidebysig instance void M8(object param) cil managed方法参数说明:
    通过引用传递 False
    HasDefaultValue=False
    是在=假
    IsLcid=假
    IsOptional=False
    输出=假
    IsRetVal=假

    方法名称 M9 void M9([DefaultValue(-10)] int param = 10)IL 签名 .method public hidebysig instance void M9([opt] int32 param) cil managed方法参数说明:
    参数名称param
    通过引用传递 False
    HasDefaultValue=True
    默认值=10
    是在=假
    IsLcid=假
    IsOptional=True
    输出=假
    IsRetVal=假

    方法名称 M10 void M10([Optional] int param)IL 签名 .method public hidebysig instance void M10([opt] int32 param) cil managed方法参数说明:
    通过引用传递 False
    HasDefaultValue=False
    是在=假
    IsLcid=假
    IsOptional=True
    输出=假
    IsRetVal=假

    我猜 In , OutOptional属性与 COM 相关,因为它们位于 System.Runtime.InteropServices 命名空间中。
    但是文档再次很差。 :(

    什么是 RetVal 以及它在哪里使用?

    最佳答案

    这显示了其中的大部分,包括 optional、out 和 defaultvalue 标志。请注意,返回值可以表示为 ParameterInfo因为它与参数有很多共同点,包括属性(通过 [return: Foo] 语法)。有关 retval 和 lcid,请参阅 When are ParameterInfo.IsLcid or ParameterInfo.IsRetval true?

    static class Program
    {
    static void Main()
    {
    var method = typeof(Program).GetMethod("Test");

    Describe(method.ReturnParameter);
    foreach (var p in method.GetParameters()) Describe(p);
    }
    static void Describe(ParameterInfo param)
    {
    Console.WriteLine("{0}, {1}, {2}",
    string.IsNullOrEmpty(param.Name) ? "(no name)" : param.Name,
    param.ParameterType, param.Position);
    if (param.IsRetval) Console.WriteLine("retval");
    if (param.IsIn) Console.WriteLine("in");
    if (param.IsOut) Console.WriteLine("out");
    if (param.ParameterType.IsByRef) Console.WriteLine("by-ref");
    if (param.IsOptional) Console.WriteLine("optional");
    if (param.HasDefaultValue)
    {
    Console.WriteLine("default value: {0}", param.DefaultValue);
    }
    Console.WriteLine();
    }

    public static int Test(int j, ref int k, out int l, string foo = "abc")
    {
    throw new NotImplementedException();
    }
    }

    关于c# - ParameterInfo 属性、属性和方法的 out ref 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15636969/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com