Recipe13.4.Finding Members in an Assembly


Recipe 13.4. Finding Members in an Assembly

Problem

You need to find one or more members of types in an assembly with a specific name or containing part of a name. This partial name could be, for example, any member starting with the letter A or the string "Test."

Solution

Use the Type.GetMember method, which returns all members that match a specified criteria:

 public static void FindMemberInAssembly(string asmPath, string memberName) {     Assembly asm = Assembly.LoadFrom(asmPath);     foreach(Type type in asm.GetTypes( ))     {         // Check for static ones first.         MemberInfo[] members = type.GetMember(memberName, MemberTypes.All,             BindingFlags.Public | BindingFlags.NonPublic |             BindingFlags.Static | BindingFlags.Instance);         foreach (MemberInfo member in members)         {             Console.WriteLine("Found " + member.MemberType + ": " +                 member.ToString( ) + " IN " +                 member.DeclaringType.FullName);         }     } } 

The memberName argument can contain the wildcard character * to indicate any character or characters. So to find all methods starting with the string "Test", pass the string "Test*" to the memberName parameter. Note that the memberName argument is case-sensitive, but the asmPath argument is not. If you'd like to do a case-insensitive search for members, add the BindingFlags.IgnoreCase flag to the other BindingFlags in the call to Type.GetMember.

Discussion

The GetMember method of the System.Type class is useful for finding one or more methods within a type. This method returns an array of MemberInfo objects that describe any members that match the given parameters.

The * character may be used as a wildcard character only at the end of the name parameter string. If placed anywhere else in the string, it will not be treated as a wildcard character. In addition, it may be the only character in the name parameter; if this is so, all members are returned. No other wildcard characters, such as ?, are supported.


Once you obtain an array of MemberInfo objects, you need to examine what kind of members they are. To do this, the MemberInfo class contains a MemberType property that returns a System.Reflection.MemberTypes enumeration value. This can be any of the values defined in Table 13-1, except for the All value.

Table 13-1. MemberTypes enumeration values

Enumeration value

Definition

All

All member types

Constructor

A constructor member

Custom

A custom member type

Event

An event member

Field

A field member

Method

A method member

NestedType

A nested type

Property

A property member

TypeInfo

A type member that represents a TypeInfo member


See Also

See Recipe 13.10; see the "Assembly Class," "BindingFlags Enumeration," and "MemberInfo Class" topics in the MSDN documentation.



C# Cookbook
Secure Programming Cookbook for C and C++: Recipes for Cryptography, Authentication, Input Validation & More
ISBN: 0596003943
EAN: 2147483647
Year: 2004
Pages: 424

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net