Recipe13.2.Listing Exported Types


Recipe 13.2. Listing Exported Types

Problem

You need to obtain all the exported types of an assembly. This information allows you to see what types are usable from outside of this assembly.

Solution

Use Assembly.GetExportedTypes to obtain the exported types of an assembly:

 using System; using System.Reflection; public static void ListExportedTypes(string path) {     // Load the assembly.     Assembly asm = Assembly. ReflectionOnlyLoadFrom(path);     Console.WriteLine("Assembly: {0} imports:",path);     // Get the exported types.     Type[] types = asm.GetExportedTypes( );     foreach (Type t in types)     {         Console.WriteLine ("\tExported Type: {0}",t.FullName);     } } 

The previous example will display all exported, or public, types:

 Assembly: C:\C#Cookbook\CSharpRecipes.exe imports:         Exported Type: CSharpRecipes.ClassAndStructs         Exported Type: CSharpRecipes.Line         Exported Type: CSharpRecipes.Square         Exported Type: CSharpRecipes.CompareHeight         Exported Type: CSharpRecipes.Foo         Exported Type: CSharpRecipes.ObjState 

Discussion

Obtaining the exported types in an assembly is useful when determining the public interface to that assembly. This ability can greatly aid in learning to use a new assembly or can aid the developer of that assembly in determining all access points to the assembly to verify that they are adequately secure from malicious code. To get these exported types, use the GetExportedTypes method on the System.Reflection.Assembly type. The exported types consist of all of the types that are publicly accessible from outside of the assembly. A type may have public accessibility but not be accessible from outside of the assembly. Take, for example, the following code:

 public class Outer {     public class Inner {}     private class SecretInner {} } 

The exported types are Outer and Outer.Inner; the type SecretInner is not exposed to the world outside of this assembly. If you change the Outer accessibility from public to private, you now have no types accessible to the outside worldthe Inner class access level is downgraded because of the private on the Outer class.

See Also

See the "Assembly Class" topic 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