【发布时间】:2013-03-16 05:49:10
【问题描述】:
好吧,我对 ParameterInfo 类的属性感到困惑。
不幸的是,文档不是很清楚:示例展示了如何构建方法,但没有展示这些方法在 C# 中的外观。
谁能告诉更多关于这些属性的信息:
DefaultValueHasDefaultValueIsInIsLcidIsOptionalIsOutIsRetval
哪种组合会导致哪种方法参数。
我做了一个简单的程序,它给出以下输出:
方法名 M1 void M1(object param)
IL 签名:.method public hidebysig instance void M1(object param) cil managed
方法参数说明:
通过引用传递 False
HasDefaultValue=False
IsIn=假
IsLcid=假
IsOptional=False
IsOut=False
IsRetVal=False
方法名 M2 void M2(object param = null)
IL签名.method public hidebysig instance void M2([opt] object param) cil managed
方法参数说明:
通过引用传递 False
HasDefaultValue=True
默认值=null
IsIn=假
IsLcid=False
IsOptional=True
IsOut=False
IsRetVal=False
方法名称 M3 void M3(out object param)
IL签名.method public hidebysig instance void M3([out] object& param) cil managed
方法参数说明:
通过引用 True
HasDefaultValue=False
IsIn=假
IsLcid=假
IsOptional=False
IsOut=True
IsRetVal=False
方法名 M4 void M4(ref object param)
IL签名.method public hidebysig instance void M4(object& param) cil managed
方法参数说明:
通过引用 True
HasDefaultValue=False
IsIn=假
IsLcid=假
IsOptional=False
IsOut=False
IsRetVal=False
方法名称 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
IsOut=False
IsRetVal=False
方法名 M6 void M6([Out] object param)
IL签名.method public hidebysig instance void M6([out] object param) cil managed
方法参数说明:
通过引用传递 False
HasDefaultValue=False
IsIn=假
IsLcid=假
IsOptional=False
IsOut=True
IsRetVal=False
方法名称 M7 void M7([Out] out object param)
IL签名.method public hidebysig instance void M7([out] object& param) cil managed
方法参数说明:
通过引用 True
HasDefaultValue=False
IsIn=假
IsLcid=假
IsOptional=False
IsOut=True
IsRetVal=False
方法名称 M8 void M8([DefaultValue(null)] object param)
IL签名.method public hidebysig instance void M8(object param) cil managed
方法参数说明:
通过引用传递 False
HasDefaultValue=False
IsIn=假
IsLcid=假
IsOptional=False
IsOut=False
IsRetVal=False
方法名 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
IsIn=假
IsLcid=False
IsOptional=True
IsOut=False
IsRetVal=False
方法名 M10 void M10([Optional] int param)
IL签名.method public hidebysig instance void M10([opt] int32 param) cil managed
方法参数说明:
通过引用传递 False
HasDefaultValue=False
IsIn=假
IsLcid=False
IsOptional=True
IsOut=False
IsRetVal=False
我猜In、Out 和 Optional 属性与 COM 相关,因为它们位于 System.Runtime.InteropServices 命名空间中。
但是文档又很差。 :(
什么是 RetVal 以及它在哪里使用?
【问题讨论】:
标签: c# reflection out ref parameterinfo