Skip to main content

Reflecting Types in .NET



Getting Types:
                Type Object can be obtained:
                                From Assembly class
                                From Module class
                                From instance of an object
                                Using typeof keyword in C#

 


Type Class:
Represents type declarations: class types, interface types, array types, value types, enumeration types, type parameters, generic type definitions, and open or closed constructed generic types.

Properties of Type class:
Name
Description
Assembly
Gets the Assembly in which the type is declared. For generic types, gets the Assembly in which the generic type is defined.
AssemblyQualifiedName
Gets the assembly-qualified name of the Type, which includes the name of the assembly from which the Type was loaded.
Attributes
Gets the attributes associated with the Type.
BaseType
Gets the type from which the current Type directly inherits.
ContainsGenericParameters
Gets a value indicating whether the current Type object has type parameters that have not been replaced by specific types.
DeclaringMethod
Gets a MethodBase that represents the declaring method, if the current Type represents a type parameter of a generic method.
DeclaringType
Gets the class that declares this member.
DefaultBinder
Gets a reference to the default binder, which implements internal rules for selecting the appropriate members to be called by InvokeMember.
FullName
Gets the fully qualified name of the Type, including the namespace of the Type but not the assembly.
HasElementType
Gets a value indicating whether the current Type encompasses or refers to another type; that is, whether the current Type is an array, a pointer, or is passed by reference.
IsAbstract
Gets a value indicating whether the Type is abstract and must be overridden.
IsAnsiClass
Gets a value indicating whether the string format attribute AnsiClass is selected for the Type.
IsArray
Gets a value indicating whether the Type is an array.
IsAutoClass
Gets a value indicating whether the string format attribute AutoClass is selected for the Type.
IsAutoLayout
Gets a value indicating whether the class layout attribute AutoLayout is selected for the Type.
IsByRef
Gets a value indicating whether the Type is passed by reference.
IsClass
Gets a value indicating whether the Type is a class; that is, not a value type or interface.
IsCOMObject
Gets a value indicating whether the Type is a COM object.
IsEnum
Gets a value indicating whether the current Type represents an enumeration.
IsGenericParameter
Gets a value indicating whether the current Type represents a type parameter in the definition of a generic type or method.
IsGenericType
Gets a value indicating whether the current type is a generic type.
IsGenericTypeDefinition
Gets a value indicating whether the current Type represents a generic type definition, from which other generic types can be constructed.
IsImport
Gets a value indicating whether the Type has a ComImportAttribute attribute applied, indicating that it was imported from a COM type library.
IsInterface
Gets a value indicating whether the Type is an interface; that is, not a class or a value type.
IsNestedAssembly
Gets a value indicating whether the Type is nested and visible only within its own assembly.
IsNestedFamANDAssem
Gets a value indicating whether the Type is nested and visible only to classes that belong to both its own family and its own assembly.
IsNestedFamily
Gets a value indicating whether the Type is nested and visible only within its own family.
IsNestedFamORAssem
Gets a value indicating whether the Type is nested and visible only to classes that belong to either its own family or to its own assembly.
IsNestedPrivate
Gets a value indicating whether the Type is nested and declared private.
IsNestedPublic
Gets a value indicating whether a class is nested and declared public.
IsNotPublic
Gets a value indicating whether the Type is not declared public.
IsPointer
Gets a value indicating whether the Type is a pointer.
IsPrimitive
Gets a value indicating whether the Type is one of the primitive types.
IsPublic
Gets a value indicating whether the Type is declared public.
IsSealed
Gets a value indicating whether the Type is declared sealed.
IsSpecialName
Gets a value indicating whether the Type has a name that requires special handling.
IsUnicodeClass
Gets a value indicating whether the string format attribute UnicodeClass is selected for the Type.
IsValueType
Gets a value indicating whether the Type is a value type.
IsVisible
Gets a value indicating whether the Type can be accessed by code outside the assembly.
MemberType
Gets a MemberTypes value indicating that this member is a type or a nested type.
MetadataToken 
Gets a value that identifies a metadata element.(Inherited from MemberInfo.)
Module
Gets the module (the DLL) in which the current Type is defined.
Name 
Gets the name of the current member.(Inherited from MemberInfo.)
Namespace
Gets the namespace of the Type.
ReflectedType
Gets the class object that was used to obtain this member.
TypeHandle
Gets the handle for the current Type.
UnderlyingSystemType
Indicates the type provided by the common language runtime that represents this type.
Public Methods of Type Class
GetArrayRank
Gets the number of dimensions in an Array.
GetConstructor
Overloaded. Gets a specific constructor of the current Type.
GetConstructors
Overloaded. Gets the constructors of the current Type.
GetCustomAttributes 
Overloaded. When overridden in a derived class, returns all attributes applied to this member. (Inherited from MemberInfo.)
GetDefaultMembers
Searches for the members defined for the current Type whose DefaultMemberAttribute is set.
GetElementType
When overridden in a derived class, returns the Type of the object encompassed or referred to by the current array, pointer or reference type.
GetEvent
Overloaded. Gets a specific event declared or inherited by the current Type.
GetEvents
Overloaded. Gets the events that are declared or inherited by the current Type.
GetField
Overloaded. Gets a specific field of the current Type.
GetFields
Overloaded. Gets the fields of the current Type.
GetGenericArguments
Returns an array of Type objects that represent the type arguments of a generic type or the type parameters of a generic type definition.
GetGenericParameterConstraints
Returns an array of Type objects that represent the constraints on the current generic type parameter.
GetGenericTypeDefinition
Returns a Type object that represents a generic type definition from which the current generic type can be constructed.
GetHashCode
Overridden. Returns the hash code for this instance.
GetInterfaces
When overridden in a derived class, gets all the interfaces implemented or inherited by the current Type.
GetMember
Overloaded. Gets the specified members of the current Type.
GetMembers
Overloaded. Gets the members (properties, methods, fields, events, and so on) of the current Type.
GetMethod
Overloaded. Gets a specific method of the current Type.
GetMethods
Overloaded. Gets the methods of the current Type.
GetNestedType
Overloaded. Gets a specific type nested within the current Type.
GetNestedTypes
Overloaded. Gets the types nested within the current Type.
GetProperties
Overloaded. Gets the properties of the current Type.
GetProperty
Overloaded. Gets a specific property of the current Type.
GetType
Overloaded. Gets a Type object that represents the specified type.
GetTypeCode
Gets the underlying type code of the specified Type.
GetTypeFromCLSID
Overloaded. Gets the type associated with the specified class identifier (CLSID).
GetTypeFromHandle
Gets the type referenced by the specified type handle.
GetTypeFromProgID
Overloaded. Gets the type associated with the specified program identifier (ProgID).
InvokeMember
Overloaded. Invokes a specific member of the current Type.
IsAssignableFrom
Determines whether an instance of the current Type can be assigned from an instance of the specified Type.
IsDefined 
When overridden in a derived class, indicates whether one or more instance of attributeType is applied to this member. (Inherited from MemberInfo.)
IsInstanceOfType
Determines whether the specified object is an instance of the current Type.
IsSubclassOf
Determines whether the class represented by the current Type derives from the class represented by the specified Type.
ReferenceEquals 
Determines whether the specified Object instances are the same instance. (Inherited from Object.)
ToString
Overridden. Returns a String representing the name of the current Type.

MethodBody Class

The MethodBody class provides access to information about the local variables and exception-handling clauses in a method body, and to the Microsoft intermediate language (MSIL) that makes up the method body.

Important usage:
(MethodBody Instance).LocalVariables[i].LocalType
(MethodBody Instance).LocalVariables[i].LocalIndex
(MethodBody Instance).GetILAsByteArray()
(MethodBody Instance).LocalVariables[i].ExceptionHandlingClauses

Using Binding Flags:
                Specifies flags that control binding and the way in which the search for members and types is conducted by reflection.



How to Use Binding Flags

Type t = typeof(String);

BindingFlags flags = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance;

MemberInfo[] members = t.GetMembers(flags);

foreach(MemberInfo member in members)
{
    Console.WriteLine("Member: {0}", member.Name);
}

Comments

Popular posts from this blog

Culture Information and Localization in .NET

Namespace: System.Globalization CultureInfo Class:                 It provides information like the Format of numbers and dates, Culture’s Calendar, Culture’s language and sublanguage (if applicable), Country and region of the culture. The Basic use of CultureInfo class is shown here: • How string Comparisons are performed • How Number Comparison & Formats are performed • Date Comparison and Formats. • How resources are retrieved and used. Cultures are grouped into three categories: Invariant Culture : It’s Culture Insensitive. It can be used to build some trial application. It can be also used to build an application with hard-coded expiry date that ignores cultures. But using it for every comparison will be incorrect and inappropriate. Neutral Culture : English(en), Frensh(fr), and Spanish(sp). A neutral culture is related to language but it’s not related to specific regi...

Concept of App Domain in .Net

Creating Application Domains: Application domain is just like process, provides separate memory space, and isolates from other code. But it’s quite light weight. It also provides the following advantages: 1-       Reliability : If a domain crashes, it can be unloaded. Hence doesn’t affect the other assemblies. 2-       Efficiency : Loading all assemblies in one domain can be cumbersome and can make the process heavy but Appdomains are efficient in this manner. Important properties of AppDomain: ApplicationIdentity , ApplicationTrust , BaseDirectory , CurrentDomain , DomainManager , DomainDirectory , Evidence , FriendlyName , ID , RelativeSearchPath , SetupInformation , ShadowCopyFiles . Important methods of AppDomain: ApplyPolicy , CreateCOMInstanceFrom , CreateDomain , CreateInstance (Assembly). To create an AppDomain: AppDomain adomain = AppDomain.CreateDomain(“D”); To execute an assembly:...

Asynchronous Execution in ASP.NET

Asynchronous Execution: Two ways either implement IHTTPAsyncHandler interface or in ASP.NET 2.0 set <%@ Page Async=”true” %>. The second option implements IHTTPAsyncHandler interface automatically for the page when parsed or compiled. AddOnPreRenderCompleteAsync ( new BeginEventHandler(BeginTask), new EndEventHandler(EndTask)); AddOnPreRenderCompleteAsync() shoud be called in Page_load. The BeginEventHandler and EndEventHandler are delegates defined as follows: IAsyncResult BeginEventHandler( object sender, EventArgs e, AsyncCallback cb, object state) void EndEventHandler( IAsyncResult ar) AsyncProcess starts and completes between PreRender and PreRenderComplete. Other way to perform Async Task is using AsyncPageTask structure. It also allows multiple tasks to execute simultaneously. void Page_Load (object sender, EventArgs e) { PageAsyncTask task = new PageAsyncTask( new BeginEventHandler(BeginTask), new EndEventH...