ParameterInfo 类

定义

发现参数的属性并提供对参数元数据的访问权限。

C#
public class ParameterInfo
C#
public class ParameterInfo : System.Reflection.ICustomAttributeProvider, System.Runtime.Serialization.IObjectReference
C#
public class ParameterInfo : System.Reflection.ICustomAttributeProvider
C#
[System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.None)]
[System.Serializable]
public class ParameterInfo : System.Reflection.ICustomAttributeProvider, System.Runtime.InteropServices._ParameterInfo
C#
[System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.None)]
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public class ParameterInfo : System.Reflection.ICustomAttributeProvider, System.Runtime.InteropServices._ParameterInfo
C#
[System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.None)]
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public class ParameterInfo : System.Reflection.ICustomAttributeProvider, System.Runtime.InteropServices._ParameterInfo, System.Runtime.Serialization.IObjectReference
继承
ParameterInfo
属性
实现

示例

此示例演示如何使用各种反射类来分析程序集中包含的元数据。

C#
using System;
using System.Reflection;

class Module1
{
    public static void Main()
    {
        // This variable holds the amount of indenting that
        // should be used when displaying each line of information.
        Int32 indent = 0;
        // Display information about the EXE assembly.
        Assembly a = typeof(Module1).Assembly;
        Display(indent, "Assembly identity={0}", a.FullName);
        Display(indent+1, "Codebase={0}", a.CodeBase);

        // Display the set of assemblies our assemblies reference.

        Display(indent, "Referenced assemblies:");
        foreach (AssemblyName an in a.GetReferencedAssemblies() )
        {
             Display(indent + 1, "Name={0}, Version={1}, Culture={2}, PublicKey token={3}", an.Name, an.Version, an.CultureInfo.Name, (BitConverter.ToString (an.GetPublicKeyToken())));
        }
        Display(indent, "");

        // Display information about each assembly loading into this AppDomain.
        foreach (Assembly b in AppDomain.CurrentDomain.GetAssemblies())
        {
            Display(indent, "Assembly: {0}", b);

            // Display information about each module of this assembly.
            foreach ( Module m in b.GetModules(true) )
            {
                Display(indent+1, "Module: {0}", m.Name);
            }

            // Display information about each type exported from this assembly.

            indent += 1;
            foreach ( Type t in b.GetExportedTypes() )
            {
                Display(0, "");
                Display(indent, "Type: {0}", t);

                // For each type, show its members & their custom attributes.

                indent += 1;
                foreach (MemberInfo mi in t.GetMembers() )
                {
                    Display(indent, "Member: {0}", mi.Name);
                    DisplayAttributes(indent, mi);

                    // If the member is a method, display information about its parameters.

                    if (mi.MemberType==MemberTypes.Method)
                    {
                        foreach ( ParameterInfo pi in ((MethodInfo) mi).GetParameters() )
                        {
                            Display(indent+1, "Parameter: Type={0}, Name={1}", pi.ParameterType, pi.Name);
                        }
                    }

                    // If the member is a property, display information about the property's accessor methods.
                    if (mi.MemberType==MemberTypes.Property)
                    {
                        foreach ( MethodInfo am in ((PropertyInfo) mi).GetAccessors() )
                        {
                            Display(indent+1, "Accessor method: {0}", am);
                        }
                    }
                }
                indent -= 1;
            }
            indent -= 1;
        }
    }

    // Displays the custom attributes applied to the specified member.
    public static void DisplayAttributes(Int32 indent, MemberInfo mi)
    {
        // Get the set of custom attributes; if none exist, just return.
        object[] attrs = mi.GetCustomAttributes(false);
        if (attrs.Length==0) {return;}

        // Display the custom attributes applied to this member.
        Display(indent+1, "Attributes:");
        foreach ( object o in attrs )
        {
            Display(indent+2, "{0}", o.ToString());
        }
    }

    // Display a formatted string indented by the specified amount.
    public static void Display(Int32 indent, string format, params object[] param)

    {
        Console.Write(new string(' ', indent*2));
        Console.WriteLine(format, param);
    }
}

//The output shown below is abbreviated.
//
//Assembly identity=ReflectionCS, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
//  Codebase=file:///C:/Documents and Settings/test/My Documents/Visual Studio 2005/Projects/Reflection/Reflection/obj/Debug/Reflection.exe
//Referenced assemblies:
//  Name=mscorlib, Version=2.0.0.0, Culture=, PublicKey token=B7-7A-5C-56-19-34-E0-89
//
//Assembly: mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
//  Module: mscorlib.dll
//  Module: mscorlib.dll
//  Module: mscorlib.dll
//  Module: mscorlib.dll
//  Module: mscorlib.dll
//  Module: mscorlib.dll
//  Module: mscorlib.dll
//  Module: mscorlib.dll
//  Module: mscorlib.dll
//  Module: mscorlib.dll
//  Module: mscorlib.dll
//  Module: mscorlib.dll
//  Module: mscorlib.dll
//  Module: mscorlib.dll
//
//  Type: System.Object
//    Member: GetType
//    Member: ToString
//    Member: Equals
//      Parameter: Type=System.Object, Name=obj
//    Member: Equals
//      Parameter: Type=System.Object, Name=objA
//      Parameter: Type=System.Object, Name=objB
//    Member: ReferenceEquals
//      Attributes:
//        System.Runtime.ConstrainedExecution.ReliabilityContractAttribute
//      Parameter: Type=System.Object, Name=objA
//      Parameter: Type=System.Object, Name=objB
//    Member: GetHashCode
//    Member: .ctor
//      Attributes:
//        System.Runtime.ConstrainedExecution.ReliabilityContractAttribute
//
//  Type: System.ICloneable
//    Member: Clone
//
//  Type: System.Collections.IEnumerable
//    Member: GetEnumerator
//      Attributes:
//        System.Runtime.InteropServices.DispIdAttribute
//
//  Type: System.Collections.ICollection
//    Member: CopyTo
//      Parameter: Type=System.Array, Name=array
//      Parameter: Type=System.Int32, Name=index
//    Member: get_Count
//    Member: get_SyncRoot
//    Member: get_IsSynchronized
//    Member: Count
//      Accessor method: Int32 get_Count()
//    Member: SyncRoot
//      Accessor method: System.Object get_SyncRoot()
//    Member: IsSynchronized
//      Accessor method: Boolean get_IsSynchronized()
//
//  Type: System.Collections.IList
//    Member: get_Item
//      Parameter: Type=System.Int32, Name=index
//    Member: set_Item
//      Parameter: Type=System.Int32, Name=index
//      Parameter: Type=System.Object, Name=value
//    Member: Add
//      Parameter: Type=System.Object, Name=value
//    Member: Contains
//      Parameter: Type=System.Object, Name=value
//    Member: Clear
//    Member: get_IsReadOnly
//    Member: get_IsFixedSize
//    Member: IndexOf
//      Parameter: Type=System.Object, Name=value
//    Member: Insert
//      Parameter: Type=System.Int32, Name=index
//      Parameter: Type=System.Object, Name=value
//    Member: Remove
//      Parameter: Type=System.Object, Name=value
//    Member: RemoveAt
//      Parameter: Type=System.Int32, Name=index
//    Member: Item
//      Accessor method: System.Object get_Item(Int32)
//      Accessor method: Void set_Item(Int32, System.Object)
//    Member: IsReadOnly
//      Accessor method: Boolean get_IsReadOnly()
//    Member: IsFixedSize
//      Accessor method: Boolean get_IsFixedSize()
//
//  Type: System.Array
//    Member: IndexOf
//      Parameter: Type=T[], Name=array
//      Parameter: Type=T, Name=value
//    Member: AsReadOnly
//      Parameter: Type=T[], Name=array
//    Member: Resize
//      Attributes:
//        System.Runtime.ConstrainedExecution.ReliabilityContractAttribute
//      Parameter: Type=T[]&, Name=array
//      Parameter: Type=System.Int32, Name=newSize
//    Member: BinarySearch
//      Attributes:
//        System.Runtime.ConstrainedExecution.ReliabilityContractAttribute
//      Parameter: Type=T[], Name=array
//      Parameter: Type=T, Name=value
//    Member: BinarySearch
//      Attributes:
//        System.Runtime.ConstrainedExecution.ReliabilityContractAttribute
//      Parameter: Type=T[], Name=array
//      Parameter: Type=T, Name=value
//      Parameter: Type=System.Collections.Generic.IComparer`1[T], Name=comparer

注解

使用 的 ParameterInfo 实例获取有关参数的数据类型、默认值等的信息。

GetParameters 按顺序返回表示方法参数的 对象的数组 ParameterInfo

构造函数

ParameterInfo()

初始化 ParameterInfo 类的新实例。

字段

AttrsImpl

参数的属性。

ClassImpl

参数的 Type

DefaultValueImpl

参数的默认值。

MemberImpl

在其中实现该字段的成员。

NameImpl

参数的名称。

PositionImpl

参数列表中参数从零开始的位置。

属性

Attributes

获取此参数的属性。

CustomAttributes

获取包含此参数自定义属性的集合。

DefaultValue

获取一个指示默认值的值(如果参数具有默认值)。

HasDefaultValue

获取一个值,指示此参数是否有默认值。

IsIn

获取一个值,通过该值指示这是否为输入参数。

IsLcid

获取一个值,通过该值指示该参数是否为区域设置标识符 (lcid)。

IsOptional

获取一个值,通过该值指示该参数是否可选。

IsOut

获取一个值,通过该值指示这是否为输出参数。

IsRetval

获取一个值,通过该值指示这是否为 Retval 参数。

Member

获取一个值,通过该值指示实现此参数的成员。

MetadataToken

获取在元数据中标识此参数的值。

Name

获取参数的名称。

ParameterType

获取该参数的 Type

Position

获取参数在形参表中的位置(从零开始)。

RawDefaultValue

获取一个指示默认值的值(如果参数具有默认值)。

方法

Equals(Object)

确定指定对象是否等于当前对象。

(继承自 Object)
GetCustomAttributes(Boolean)

获取此参数上定义的所有自定义属性。

GetCustomAttributes(Type, Boolean)

获取应用于此参数的指定类型或其派生类型的自定义属性。

GetCustomAttributesData()

返回当前参数的 CustomAttributeData 对象列表,这些对象可以在仅反射上下文中使用。

GetHashCode()

作为默认哈希函数。

(继承自 Object)
GetModifiedParameterType()

获取此参数对象的修改类型。

GetOptionalCustomModifiers()

获取参数可选的自定义修饰符。

GetRealObject(StreamingContext)
已过时.

返回应进行反序列化的实际对象,而不是序列化流指定的对象。

GetRequiredCustomModifiers()

获取参数所必需的自定义修饰符。

GetType()

获取当前实例的 Type

(继承自 Object)
IsDefined(Type, Boolean)

确定指定类型或其派生类型的自定义属性是否应用于此参数。

MemberwiseClone()

创建当前 Object 的浅表副本。

(继承自 Object)
ToString()

获取表示为字符串的参数类型和名称。

ToString()

返回表示当前对象的字符串。

(继承自 Object)

显式接口实现

_ParameterInfo.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

将一组名称映射为对应的一组调度标识符。

_ParameterInfo.GetTypeInfo(UInt32, UInt32, IntPtr)

检索对象的类型信息,然后可以使用该信息获取接口的类型信息。

_ParameterInfo.GetTypeInfoCount(UInt32)

检索对象提供的类型信息接口的数量(0 或 1)。

_ParameterInfo.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

提供对某一对象公开的属性和方法的访问。

ICustomAttributeProvider.GetCustomAttributes(Boolean)

返回在该成员上定义的所有自定义特性的数组(已命名的特性除外),如果没有自定义特性,则返回空数组。

ICustomAttributeProvider.GetCustomAttributes(Type, Boolean)

返回在该成员上定义、由类型标识的自定义属性数组,如果没有该类型的自定义属性,则返回空数组。

ICustomAttributeProvider.IsDefined(Type, Boolean)

指示是否在该成员上定义了一个或多个 attributeType 实例。

扩展方法

GetCustomAttribute(ParameterInfo, Type)

检索应用于指定参数的指定类型的自定义特性。

GetCustomAttribute(ParameterInfo, Type, Boolean)

检索应用于指定参数的指定类型的自定义特性,并可选择检查该参数的上级。

GetCustomAttribute<T>(ParameterInfo)

检索应用于指定参数的指定类型的自定义特性。

GetCustomAttribute<T>(ParameterInfo, Boolean)

检索应用于指定参数的指定类型的自定义特性,并可选择检查该参数的上级。

GetCustomAttributes(ParameterInfo)

检索应用于指定参数的自定义特性的集合。

GetCustomAttributes(ParameterInfo, Boolean)

检索应用于指定参数的自定义特性集合,并可选择检查该参数的上级。

GetCustomAttributes(ParameterInfo, Type)

检索应用于指定参数的指定类型的自定义特性集合。

GetCustomAttributes(ParameterInfo, Type, Boolean)

检索应用于指定参数的指定类型的自定义特性集合,并可选择检查该参数的上级。

GetCustomAttributes<T>(ParameterInfo)

检索应用于指定参数的指定类型的自定义特性集合。

GetCustomAttributes<T>(ParameterInfo, Boolean)

检索应用于指定参数的指定类型的自定义特性集合,并可选择检查该参数的上级。

IsDefined(ParameterInfo, Type)

确定是否将指定类型的任何自定义属性应用于指定的参数。

IsDefined(ParameterInfo, Type, Boolean)

指示一个指定类型的自定义特性是否应用于一个指定的参数,并选择性地应用于其的上级。

适用于

产品 版本
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

线程安全性

此类型是线程安全的。