using System; class Program { static void Main(string[] args) { int i = 42; Type t = i.GetType(); Console.WriteLine(t.Name); // Int32 } }
using System; using System.Reflection; using System.Runtime.InteropServices; class Program { static void Main(string[] args) { Type type = typeof(Console); // Get the ITypeInfo interface for the type. ITypeInfo iTypeInfo = Marshal.GetTypeInfoForType(type); // Get information about the members of the type. MEMBERID memberId = MEMBERID.NIL; while (true) { VARDESC varDesc; try { iTypeInfo.GetVarDesc(memberId, out varDesc); Console.WriteLine(varDesc.memid); Console.WriteLine(varDesc.varkind); } catch (Exception) { break; } finally { iTypeInfo.ReleaseVarDesc(varDesc); } memberId++; } } } [ComImport] [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] [Guid("00020400-0000-0000-C000-000000000046")] interface ITypeInfo { void GetTypeAttr(out IntPtr ppTypeAttr); void GetTypeComp(out ITypeComp ppTComp); void GetFuncDesc([MarshalAs(UnmanagedType.U4)] int index, out IntPtr ppFuncDesc); void GetVarDesc([MarshalAs(UnmanagedType.U4)] int index, out IntPtr ppVarDesc); void GetNames([MarshalAs(UnmanagedType.U4)] int memid, [MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 2)] [Out] string[] rgBstrNames, [MarshalAs(UnmanagedType.U4)] int cMaxNames, [MarshalAs(UnmanagedType.U4)] out int pcNames); void GetRefTypeOfImplType([MarshalAs(UnmanagedType.U4)] int index, out IntPtr ppTRefType); void GetImplTypeFlags([MarshalAs(UnmanagedType.U4)] int index, out int pImplTypeFlags); void GetIDsOfNames([MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.LPWStr, SizeParamIndex = 1)] string[] rgszNames, [MarshalAs(UnmanagedType.U4)] int cNames, [MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 1)] [Out] MEMBERID[] pMemId); void Invoke([MarshalAs(UnmanagedType.IUnknown)] object pvInstance, [MarshalAs(UnmanagedType.U4)] int memid, [MarshalAs(UnmanagedType.U4)] [In, Out] ref ushort wFlags, [MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 3)] DISPPARAMS[] pDispParams, [MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 3)] [Out] VARIANT[] pVarResult, [MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 3)] [Out] EXCEPINFO[] pExcepInfo, [MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 3)] [Out] uint[] puArgErr); void GetDocumentation([MarshalAs(UnmanagedType.U4)] int memid, out string pBstrName, out string pBstrDocString, out int pdwHelpContext, out string pBstrHelpFile); void GetDllEntry([MarshalAs(UnmanagedType.U4)] int memid, [MarshalAs(UnmanagedType.U4)] INVOKEKIND invKind, [MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 3)] [Out] string[] pBstrDllName, [MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 3)] [Out] string[] pBstrName, [MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 3)] [Out] ushort[] pwOrdinal); void GetRefTypeInfo(IntPtr hRefType, out ITypeInfo ppTInfo); void AddressOfMember([MarshalAs(UnmanagedType.U4)] int memid, [MarshalAs(UnmanagedType.U4)] INVOKEKIND invKind, out IntPtr ppv); void CreateInstance([MarshalAs(UnmanagedType.IUnknown)] object pUnkOuter, [MarshalAs(UnmanagedType.LPStruct)] Guid riid, [MarshalAs(UnmanagedType.IUnknown)] out object ppvObj); void GetMops([MarshalAs(UnmanagedType.U4)] int memid, out string pBstrMops); void GetContainingTypeLib(out ITypeLib ppTLib, out int pIndex); [PreserveSig] void ReleaseTypeAttr(IntPtr pTypeAttr); [PreserveSig] void ReleaseFuncDesc(IntPtr pFuncDesc); [PreserveSig] void ReleaseVarDesc(IntPtr pVarDesc); }This example retrieves information about the members (variables and methods) of the Console type. The ITypeInfo interface is used to retrieve information about each member and print it to the console. The example includes a declaration of the ITypeInfo interface and the MEMBERID enumeration, which are not included in the System.Runtime.InteropServices namespace. To compile and run this code, we need to include the System.Reflection namespace and reference the System.Runtime.InteropServices.dll and System.Runtime.InteropServices.ComTypes.dll package libraries.