MSDN and Object Browser show members of .NET types. However, MSDN and Object Browser do not directly show where values of a given type are used in .NET Framework as members or arguments. The following Silverlight 4 application closes the gap and increases .NET Framework discoverability (*). It hints to a .NET programmer
where a given type can be used. The application considers .NET Framework 4 exported types and their non-private non-internal members. The application is intuitive, but some explanation to avoid ambiguity below. The type search query string must be of length 3 or more. The size of the Silverlight application is 4MB.
Each node which corresponds to a type has 25 children nodes as follows:
- "base types" points to the base type of the aforementioned type and all interfaces which it implements;
- "constructors" points to constructors of the type;
- "events" points to events which are not inherited from base types;
- "fields" points to fields which are declared in the type (not inherited); see DeclaredOnly;
- "methods" points to methods which are declared in the type and are not extension methods;
- "fextension methods" points to methods which are declared in the type as extension methods for other types;
- "properties" points to properties which are declared in the type;
- "nested types" points to nested types which are declared in the type; (Inherited members see in base types);
- "*constructors" points to constructors which use the value of the type as argument;
- "*events" points to events which handled with an event handler of the type (if the type is an event handler type);
- "*fields" points to fields with values of the type;
- "*methods" points to methods, but not extension methods, which have the value of the type as argument or return;
- "*fextension methods" points to extension methods which have the value of the type as argument or return, but not the first argument;
- "extension methods" points to extension methods which have the value of the type as their first argument;
- "*properties" points to properties with values of the type;
- "*nested types" points to the type for which the type is a nested type (if the type is a nested type);
- "elementtype" points to the type of the array elements if the type is array type or to the type to which the pointer points if the type is pointer type; the type and the reference to it are considered the same; see GetElementType;
- "*elementtype" points to array type or pointer type for which the type is their element type and which are in this index (**);
- "generictypedefinition" points to the generic type definition of the type (if the type is a generic type);
- "*generictypedefinition" points to generic types for which the type is their generic type definition (if the type is a generic type definition);
- "generic type arguments and constraints" points to generic type arguments of the generic type or generic type parameters of the generic type and their constraints;
- "*generic type arguments and constraints" points to generic types in this index (**) which use the type as a generic type argument or a generic type parameter constraint;
- "attributes" points to custom attributes of the type;
- "*attributes" points to types which have a custom attribute of the type (if the type is an attribute);
- "derived types" points to derived types of the type or to types which implement the interface if the type is an interface.
The first row of the application contains textbox to enter search queries, case sensitivity, previous, exact match and next buttons. The second row contains a textbox to allow copy paste. When a textblock in the tree is clicked, its text is copied to the second row read only textbox. The button in the second row copies the text in the second row textbox to the first row textbox.
Index is an alphabetical list of names, subjects, etc., with references to the places where they occur, typically found at the end of a book (Google definition).
(*) Partially, the gap was closed by Microsoft for WPF, see (used by) rows in WPF Xaml Vocabulary Specification.
(**) The set of .NET Index types is a closure of the set of .NET Framework 4 exported types under the operations of taking a type of non-private non-internal members and their arguments.


