好吧,我对ParameterInfo
类的属性感到困惑。
不幸的是,文档不是很清楚:示例展示了如何构建方法,但没有展示这些方法在 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
IsIn=False
IsLcid=False
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
DefaultValue=null
IsIn=False
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=False
IsLcid=False
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=False
IsLcid=False
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=False
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=False
IsLcid=False
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=False
IsLcid=False
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=False
IsLcid=False
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
DefaultValue=10
IsIn=False
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=False
IsLcid=False
IsOptional=True
IsOut=False
IsRetVal=False
我猜In
,Out
并且Optional
属性与 COM 相关,因为它们位于 System.Runtime.InteropServices 命名空间中。
但是文档又很差。:(
什么是 RetVal 以及它在哪里使用?