NDepend

Improve your .NET code quality with NDepend

SOLID Design: The Dependency Inversion Principle (DIP)

After having covered the Open-Close Principle (OCP), the Liskov Substitution Principle (LSP), the Single Responsibility Principle (SRP) and the Interface Segregation Principle (ISP) let’s talk about the Dependency Inversion Principle (DIP) which is the D in the SOLID acronym. The DIP definition is:

a. High-level modules should not depend on low-level modules. Both should depend on abstractions.
b. Abstractions should not depend on details (concrete implementation). Details should depend on abstractions.

The DIP has been introduced in the 90s by Robert C Martin. Here is the original article.

A Dependency is a Risk

As all SOLID principles DIP is about system maintainability and reusability. Inevitably some parts of the system will evolve and will be modified. We want a design that is resilient to changes. To avoid that a change breaks too much, we must:

  • first identify parts of the code that are changes-prone.
  • second avoid dependencies on those changes-prone code portion.

The Liskov Substitution Principle (LSP) and the Interface Segregation Principle (ISP) articles explains that interfaces must be carefully thought out. Both principles are 2 faces of the same coin:

  • ISP is the client perspective: If an interface is too fat probably the client sees some behaviors it doesn’t care for.
  • LSP is the implementer perspective: If an interface is too fat probably a class that implements it won’t implement all its behaviors. Some behavior will end up throwing something like a NotSupportedException.

Efforts put in applying ISP and LSP result in interfaces stability. As a consequence these well-designed interfaces are less subject to changes than concrete classes that implement them.

Also having stable interfaces results in improved reusability. I am pretty confident that the interface IDisposable will never change. My classes can safely implement it and this interface is re-used all over the world.

In this context, the DIP states that depending on interfaces is less risky than depending on concrete implementations. DIP is about transforming this code:

into this code:

DIP is about removing dependencies from high-level code (like the ClientCode() method) to low-level code, low-level code being implementation details like the SqlConnection class. For that we create interfaces like IDbConnection. Then both high-level code and low-level code depend on these interfaces. The key is that SqlConnection is not visible anymore from the ClientCode(). This way the client code won’t be impacted by implementation changes, like when replacing the SQL Server RDBMS implementation with MySql for example.

Let’s underline that this minimal code sample doesn’t do justice to the word Inversion in the DIP acronym. The inversion is about interfaces introduced (to be consumed by high-level code) and implementation details: implementation details depends on the interfaces, not the opposite, here is the inversion.

DIP and Dependency Injection (DI)

The acronym DI is used for Dependency Injection and since it is almost the same as the DIP acronym this provokes confusion. The I is used for Inversion or Injection which might add up confusion. Hopefully DI and DIP are very much related.

  • DIP states that classes that implement interfaces are not visible to the client code.
  • DI is about binding classes behind the interfaces consumed by client code.

DI means that some code, external to client code, configures which classes will be used at runtime by the client code. This is simple DI:

Many .NET DI frameworks exist to offer flexibility in binding classes behind interfaces. Those frameworks are based on reflection and thus, they offer some kind of magic. The syntax looks like:

And then comes what is called a Service Locator. The client can use the locator to create instances of the concrete type without knowing it. It is like invoking a constructor on an interface:

Thus while DIP is about maintainable and reusable design, DI is about flexible design. Both are very much related. Let’s notice that the flexibility obtained from DI is especially useful for testing purposes. Being DIP compliant improves the testability of the code:

DIP and Inversion of Control (IoC)

The Inversion word is used both in DIP and IoC acronyms. This provokes confusion. Remember that the word Inversion in the DIP acronym is about implementation details depending on interfaces, not the opposite. The Inversion word in the IoC acronym is about calls to Library transformed into callbacks from Framework.

IoC is what differentiates a Framework from a Library. A library is typically a collection of functions and classes. On the other hands a framework also offers reusable classes but massively relies on callbacks. For example UI frameworks offers many callback points through graphical events:

The method m_ButtonOnClick() bound to the Button.OnClick event is a callback method. Instead of client code calling a framework method, the framework is responsible for calling back client code. This is an inversion in the control flow.

We can see that IoC is not related to DIP. However we can see Dependency Injection has a specialization of IoC:  DI is an IoC used specifically to manage dependencies.

DIP and the Level metric

Several code metrics can be used to measure, and thus constraint, the usage of DIP. One of these metric is the Level metric. The Level metric is defined as followed:

From this diagram we can infer that:

  • The Level metric is not defined for components involved in a dependency cycle. As a consequence null values can help tracking component dependency cycles.
  • The Level metric is defined for any dependency graph. Thus a Level metric can be defined for various granularity: methods, types, namespaces, assemblies.

DIP mostly states that types with Level 0 must be interfaces and enumerations (note that interfaces using others interfaces have a Level value higher than 0). If we say that a component is a group of types (like a namespace or an assembly) the DIP states that components with Level 0 must contain mostly interfaces and enumerations. With a quick code query like this one you can have a glance at types Level and check if most of low level types are interfaces:

The Level metric can also be used to track classes with high Level values: it is a good indication that some interfaces must be introduced to break the long chain of concrete code calls:

The class Program has a Level of 8 and if we look at the dependency graphs of types used from Program we can certainly see opportunities to introduce abstractions to be more DIP compliant:

DIP and the Abstractness vs. Instability Graph

Robert C. Martin not only coined the DIP but also proposed some code metrics to measure the DIP compliance. See these metrics definitions here. From these metrics an intriguing Abstractness vs. Instability diagram can be plotted. Here we plotted the 3 assemblies of the OSS eShopOnWeb application. This diagram has been obtained from an NDepend report:

  • The Abstractness metric is normalized : it takes its values in the range [0,1]. It measures the interfaces / classes ratio (1 means the assembly contains only interfaces and enumerations).
  • The Instability metric is normalized and measures the assembly’s resilience to change. In this context, being stable means that a lot of code depends on you (which is wrong for a concrete class and fine for an interface) and being unstable means the opposite: not much code depends on you (which is fine for a concrete class and wrong for an interface, a poorly used interface is potentially a waste of design efforts).

This diagram shows a balance between the two metrics and defines some green/orange/red zones:

  • A dot in the red Zone of Pain means that the assembly is mostly concrete and used a lot. This is a pain because all those concrete classes will likely undergo a lot of changes and each change will potentially impact a lot of code. An example of a class living in the Zone of Pain would be the String class. It is massively used but it is concrete: if a change should occur today in the String class the entire world would be impacted. Hopefully we can count on the String implementation to be both performance-wise and bug-free.
  • A dot in the red Zone of Uselessness means that the assembly contains mostly interfaces and enumerations and is not much used. This makes these abstractions useless.
  • The Green zone revolves around the Main Sequence line. This line represents the right balance between both metrics. Containing mostly interfaces and being used a lot is fine. Containing mostly classes and not being used much is fine. And then comes all intermediate well balanced values between these 2 extremes represented by the Main Sequence line. The Distance from Main Sequence metric can be normalized and measures this balance. A value close to 0 means that the dot is near the line, in the green zone, and that the DIP is respected.

Conclusion

As the Open-Close Principle (OCP), the Liskov Substitution Principle (LSP) and the Interface Segregation Principle (ISP) the DIP is a key principle to wisely harness the OOP abstraction and polymorphism concepts in order to improve the maintainability, the reusability and the testability of your code. No principle is an island (except maybe the Single Responsibility Principle (SRP)) and they must be applied hands-in-hands.

This article concludes this SOLID posts serie. Being aware of SOLID principles is not enough: they must be kept in mind during every design decision. But they also must be constrained by the KISS principle, Keep It Simple Stupid, because as we explained in the post Are SOLID principles Cargo Cult? it is easy to write entangled code in the name of SOLID principles. Then one can learn from experience. With years, identifying the right abstractions and partitioning properly the business needs in well balanced classes is becoming natural.

SOLID Design: The Interface Segregation Principle (ISP)

After having covered The Open-Close Principle (OCP), The Liskov Substitution Principle (LSP) and the Single Responsibility Principle (SRP) let’s talk about the Interface Segregation Principle (ISP) which is the I in the SOLID acronym. The ISP definition is:

Client should not be forced to depend on methods it does not use.

It is all about interface, the common abstractions available in most OOP language such as C#, VB.NET or Java. A more complete and actionable explanation of ISP is:

ISP splits interfaces that are very large into smaller and more specific ones so that clients will only have to know about the methods that are of interest to them. Such shrunken interfaces are also called role interfaces.

Roles and Responsibilities

When a class implements several shrunken role interfaces, it has several roles which might lead to think that such class has several responsibilities: it would then violate the Single Responsibility Services.

But a role is a finer-grained concept than a responsibility. An example of a role is the IDisposable interface:

This interface has a single method but it is implemented by a wide variety of classes: DB or network connections that need to be closed gracefully, UI elements that need to deallocate some bitmaps in memory… The only thing the IDisposable interface says to clients is that instances of IDisposable class needs a graceful shutdown.

Hence IDisposable represents a technical detail that the client needs to be aware of. It is much finer-grained concept than a responsibility.

A small interface is not necessarily a good abstraction

A single method interface often makes sense, an IExecutor that Execute(), an IVisitor that Visit(), an IParent that exposes Children { get; }. Often, such minimalist interface should be generic. For example the interface ICloneable available since the .NET Framework v1.1 is nowadays considered as a code smell: when using it the client needs to downcast the cloned Object reference returned to do anything useful with the cloned instance.

ICloneable has another major drawback: it doesn’t inform the client if the clone operation is deep or shallow. This problem is even more serious than the Object reference downcasting one: it is a real design problem. As we can see a minimalist interface is not necessarily a good abstraction. In this example, the lack of information means ambiguity for the client. This would have been better design:

A fat interface is not necessarily a design flaw

A rule like Avoid too large interfaces can certainly pinpoint most of the ISP violations. A threshold of 10 methods is proposed by default to define a too large interface.

However, as always with code metrics and static analysis, such rule can also spit some false positives. For example this fat interface is valid:

In such case the SuppressMessageAttribute can be used with a proper justification. Such justification embeds in the code itself the design decisions. It makes the source code more understandable and more maintainable:

ISP and the Liskov Substitution Principle (LSP)

ISP and LSP are like 2 faces of the same coin:

  • ISP is the client perspective: If an interface is too fat probably the client sees some behaviors it doesn’t care for.
  • LSP is the implementer perspective: If an interface is too fat probably a class that implements it won’t implement all its behaviors. Some behavior will end up throwing something like a NotSupportedException.

Remember the ICollection<T> interface already discussed in the LSP article. This interface forces all its implementers to implement an Add() method. From the Array class perspective, implementing ICollection<T> is a violation of the LSP because array doesn’t support element adding:

The same way many clients will only need a read-only view of consumed collections. ICollection<T> also violates the ISP: it forces those clients to be coupled with Add() / Insert() / Remove() methods they don’t need. The introduction of IReadOnlyCollection<T> solved both ISP and LSP violations.

This example also shows that ISP doesn’t necessarily mean that a class should implement several lightweight interfaces. It is fine to nest interfaces like russian-nesting-dolls. ICollection<T> is a bit fat, it does a lot, read, add, insert, remove, count… But this interface is well-adapted both for classes that are read/write collections and for clients that work on read/write collection. It makes more sense to nest both read/write behaviors into ICollection<T> than to decompose both behaviors into IReadOnlyCollection<T> and an hypothetical IWriteOnlyCollection<T> interface.

Btw, maybe you noticed that ICollection<T> actually doesn’t implement IReadOnlyCollection<T>. In an ideal world it should implement it but IReadOnlyCollection<T> was introduced several years after ICollection<T> and backward compatibility must be preserved: for example this class would have been broken if ICollection<T> was implementing IReadOnlyCollection<T>, because of the explicit interface implementation usage on ICollection<T>.Count:

Conclusion

ISP is about preventing inadvertent coupling between a client and some behaviors he/she won’t need. Being coupled with something unneeded is a problem:

  • In the best case it is a waste: this forces the client to consume precious brain-cycles to consider something he/she doesn’t need.
  • In the worst case it is error-prone: the client ends-up misusing the extra behaviors, like attempting to add an element to an array through ICollection<T>.Add().

As for all SOLID principles, ISP is better applied if you practice test-first, or at least, if you write tests and code at the same time. ISP is about the client perspective and writing tests transforms you for a while into a client of your code.

 


Out of curiosity I wrote this code query that can be re-used to attempt to measure compliance with the ISP.

This query estimates the ratio of usage of the methods of an interface over the maximum usage (maximum usage being when all types consuming an interface call all methods of the interface). Some work would be needed to transform this experimental query into a formal rule. For example the query needs to be smart about methods overloaded that can arguably be considered as a single method.

Nevertheless here are the raw results for non-public interfaces of the .NET framework implementation. Only non-public interfaces are considered because we need to also analyze some real clients of the interface:

927 types score tUsers interfaceMethods Full Name
IExceptionData 0.33 3 types 1 method Microsoft.Build.Tasks.Xsd.IExceptionData
IDtcNetworkAccessConfig 0.077 2 types 13 methods Microsoft.Tools.ServiceModel.WsatConfig .IDtcNetworkAccessConfig
INetFirewallOpenPort 0.6 1 type 15 methods Microsoft.Tools.ServiceModel.WsatConfig .INetFirewallOpenPort
INetFirewallOpenPortsCollection 0.6 1 type 5 methods Microsoft.Tools.ServiceModel.WsatConfig .INetFirewallOpenPortsCollection
INetFirewallProfile 0.071 1 type 14 methods Microsoft.Tools.ServiceModel.WsatConfig .INetFirewallProfile
INetFirewallPolicy 0.5 1 type 2 methods Microsoft.Tools.ServiceModel.WsatConfig .INetFirewallPolicy
INetFirewallMgr 0.2 1 type 5 methods Microsoft.Tools.ServiceModel.WsatConfig .INetFirewallMgr
IDtdInfo 0.056 23 types 7 methods System.Xml.IDtdInfo
IDtdAttributeListInfo 0.33 3 types 6 methods System.Xml.IDtdAttributeListInfo
IDtdAttributeInfo 0.39 4 types 7 methods System.Xml.IDtdAttributeInfo
IDtdDefaultAttributeInfo 0.11 9 types 4 methods System.Xml.IDtdDefaultAttributeInfo
IDtdEntityInfo 0.19 6 types 12 methods System.Xml.IDtdEntityInfo
IDtdParser 0.58 3 types 4 methods System.Xml.IDtdParser
IDtdParserAdapter 0.21 5 types 32 methods System.Xml.IDtdParserAdapter
IDtdParserAdapterWithValidation 0.75 2 types 2 methods System.Xml .IDtdParserAdapterWithValidation
IDtdParserAdapterV1 1 1 type 3 methods System.Xml.IDtdParserAdapterV1
IValidationEventHandling 0.3 10 types 2 methods System.Xml.IValidationEventHandling
IRemovableWriter 0.5 1 type 2 methods System.Xml.IRemovableWriter
INameScope 1 2 types 2 methods System.Xml.Serialization.INameScope
IXamlBuildProviderExtension 0.5 2 types 2 methods System.Xaml.Hosting .IXamlBuildProviderExtension
IXamlBuildProviderExtensionFactory 1 1 type 1 method System.Xaml.Hosting .IXamlBuildProviderExtensionFactory
IAddLineInfo 0.5 2 types 1 method MS.Internal.Xaml.Runtime.IAddLineInfo
ICheckIfInitialized 0.5 2 types 1 method MS.Internal.Xaml.Context .ICheckIfInitialized
IServiceDescriptionBuilder 1 1 type 1 method System.ServiceModel.Description .IServiceDescriptionBuilder
IExternalDataExchange 0.33 3 types 1 method System.ServiceModel.Activities .IExternalDataExchange
IWDEProgramNode 0 1 type 1 method System.Workflow.Runtime.DebugEngine .IWDEProgramNode
IWDEProgramPublisher 1 1 type 2 methods System.Workflow.Runtime.DebugEngine .IWDEProgramPublisher
ISupportWorkflowChanges 1 1 type 3 methods System.Workflow.ComponentModel .ISupportWorkflowChanges
ISupportAlternateFlow 1 11 types 1 method System.Workflow.ComponentModel .ISupportAlternateFlow
IDependencyObjectAccessor 0.3 10 types 4 methods System.Workflow.ComponentModel .IDependencyObjectAccessor
IWorkflowCoreRuntime 0.1 20 types 31 methods System.Workflow.ComponentModel .IWorkflowCoreRuntime
ITimerService 0.5 2 types 2 methods System.Workflow.ComponentModel .ITimerService
IWorkflowDesignerMessageSink 0.23 4 types 32 methods System.Workflow.ComponentModel.Design .IWorkflowDesignerMessageSink
IPropertyValueProvider 1 2 types 1 method System.Workflow.ComponentModel.Design .IPropertyValueProvider
IOleServiceProvider 0.5 2 types 1 method System.Workflow.ComponentModel.Compiler .IOleServiceProvider
IWorkflowBuildHostProperties 0.5 1 type 2 methods System.Workflow.ComponentModel.Compiler .IWorkflowBuildHostProperties
IWorkflowCompilerError 0 1 type 6 methods System.Workflow.ComponentModel.Compiler .IWorkflowCompilerError
IWorkflowCompilerErrorLogger 1 1 type 2 methods System.Workflow.ComponentModel.Compiler .IWorkflowCompilerErrorLogger
ISymUnmanagedReader 0.12 1 type 17 methods System.Workflow.ComponentModel.Compiler .ISymUnmanagedReader
ISymUnmanagedMethod 0.2 1 type 10 methods System.Workflow.ComponentModel.Compiler .ISymUnmanagedMethod
ISymUnmanagedDocument 0.1 1 type 10 methods System.Workflow.ComponentModel.Compiler .ISymUnmanagedDocument
IMetaDataDispenser 0.33 1 type 3 methods System.Workflow.ComponentModel.Compiler .IMetaDataDispenser
ITypeAuthorizer 0.33 3 types 1 method System.Workflow.ComponentModel .Serialization.ITypeAuthorizer
IDirectoryOperation 0.5 2 types 1 method System.Workflow.Activities .IDirectoryOperation
ICorrelationProvider 0.33 3 types 2 methods System.Workflow.Activities .ICorrelationProvider
IMethodResponseMessage 0.25 2 types 4 methods System.Workflow.Activities .IMethodResponseMessage
IDeliverMessage 0.33 3 types 2 methods System.Workflow.Activities .IDeliverMessage
IPropertyValueProvider 1 2 types 1 method System.Workflow.Activities.Common .IPropertyValueProvider
IAliasResolver 1 1 type 2 methods System.Resources.IAliasResolver
ISection 0 4 types 4 methods System.Deployment.Internal.Isolation .ISection
ISectionEntry 0 1 type 2 methods System.Deployment.Internal.Isolation .ISectionEntry
IEnumSTORE_ASSEMBLY_INSTALLATION_REFEREN CE 0 1 type 4 methods System.Deployment.Internal.Isolation .IEnumSTORE_ASSEMBLY_INSTALLATION_REFERE NCE
IEnumSTORE_DEPLOYMENT_METADATA 0.17 3 types 4 methods System.Deployment.Internal.Isolation .IEnumSTORE_DEPLOYMENT_METADATA
IEnumSTORE_DEPLOYMENT_METADATA_PROPERTY 0.17 3 types 4 methods System.Deployment.Internal.Isolation .IEnumSTORE_DEPLOYMENT_METADATA_PROPERTY
IEnumSTORE_ASSEMBLY 0.17 3 types 4 methods System.Deployment.Internal.Isolation .IEnumSTORE_ASSEMBLY
IEnumSTORE_ASSEMBLY_FILE 0.17 3 types 4 methods System.Deployment.Internal.Isolation .IEnumSTORE_ASSEMBLY_FILE
IEnumSTORE_CATEGORY 0.17 3 types 4 methods System.Deployment.Internal.Isolation .IEnumSTORE_CATEGORY
IEnumSTORE_CATEGORY_SUBCATEGORY 0.25 2 types 4 methods System.Deployment.Internal.Isolation .IEnumSTORE_CATEGORY_SUBCATEGORY
IEnumSTORE_CATEGORY_INSTANCE 0.17 3 types 4 methods System.Deployment.Internal.Isolation .IEnumSTORE_CATEGORY_INSTANCE
IReferenceIdentity 0.071 7 types 4 methods System.Deployment.Internal.Isolation .IReferenceIdentity
IDefinitionIdentity 0.038 13 types 4 methods System.Deployment.Internal.Isolation .IDefinitionIdentity
IEnumDefinitionIdentity 0.17 3 types 4 methods System.Deployment.Internal.Isolation .IEnumDefinitionIdentity
IEnumReferenceIdentity 0.25 2 types 4 methods System.Deployment.Internal.Isolation .IEnumReferenceIdentity
IDefinitionAppId 0.059 17 types 6 methods System.Deployment.Internal.Isolation .IDefinitionAppId
IReferenceAppId 0.2 5 types 5 methods System.Deployment.Internal.Isolation .IReferenceAppId
IIdentityAuthority 0 1 type 18 methods System.Deployment.Internal.Isolation .IIdentityAuthority
IAppIdAuthority 0.062 3 types 16 methods System.Deployment.Internal.Isolation .IAppIdAuthority
IStore 0.24 4 types 20 methods System.Deployment.Internal.Isolation .IStore
IManifestParseErrorCallback 0 1 type 1 method System.Deployment.Internal.Isolation .IManifestParseErrorCallback
IManifestInformation 0.5 2 types 1 method System.Deployment.Internal.Isolation .IManifestInformation
IActContext 0.28 2 types 18 methods System.Deployment.Internal.Isolation .IActContext
ICMS 0.011 4 types 22 methods System.Deployment.Internal.Isolation .Manifest.ICMS
IDescriptionMetadataEntry 0.43 1 type 7 methods System.Deployment.Internal.Isolation .Manifest.IDescriptionMetadataEntry
IDeploymentMetadataEntry 0.17 1 type 6 methods System.Deployment.Internal.Isolation .Manifest.IDeploymentMetadataEntry
IMetadataSectionEntry 0.14 1 type 21 methods System.Deployment.Internal.Isolation .Manifest.IMetadataSectionEntry
FileDialogNative+IModalWindow 0 1 type 1 method System.Windows.Forms .FileDialogNative+IModalWindow
FileDialogNative+IShellItemArray 0.14 2 types 7 methods System.Windows.Forms .FileDialogNative+IShellItemArray
FileDialogNative+IFileDialog 0.017 5 types 24 methods System.Windows.Forms .FileDialogNative+IFileDialog
FileDialogNative+IFileOpenDialog 0.038 2 types 26 methods System.Windows.Forms .FileDialogNative+IFileOpenDialog
FileDialogNative+IFileSaveDialog 0 2 types 29 methods System.Windows.Forms .FileDialogNative+IFileSaveDialog
FileDialogNative+IFileDialogEvents 0 1 type 7 methods System.Windows.Forms .FileDialogNative+IFileDialogEvents
FileDialogNative+IShellItem 0 7 types 5 methods System.Windows.Forms .FileDialogNative+IShellItem
IKeyboardToolTip 0.23 4 types 13 methods System.Windows.Forms.IKeyboardToolTip
ISupportOleDropSource 1 1 type 2 methods System.Windows.Forms .ISupportOleDropSource
ISupportToolStripPanel 0.27 6 types 8 methods System.Windows.Forms .ISupportToolStripPanel
ListView+ListViewItemCollection+IInnerLi st 0.31 3 types 15 methods System.Windows.Forms .ListView+ListViewItemCollection+IInnerL ist
NativeMethods+IHTMLDocument 0 1 type 1 method System.Windows.Forms .NativeMethods+IHTMLDocument
UnsafeNativeMethods+IHTMLDocument 0 6 types 1 method System.Windows.Forms .UnsafeNativeMethods+IHTMLDocument
UnsafeNativeMethods+IHTMLDocument2 0.057 6 types 109 methods System.Windows.Forms .UnsafeNativeMethods+IHTMLDocument2
UnsafeNativeMethods+IHTMLDocument3 0.049 3 types 41 methods System.Windows.Forms .UnsafeNativeMethods+IHTMLDocument3
UnsafeNativeMethods+IHTMLDocument4 0.071 2 types 14 methods System.Windows.Forms .UnsafeNativeMethods+IHTMLDocument4
UnsafeNativeMethods+IHTMLFramesCollectio n2 0.33 3 types 2 methods System.Windows.Forms .UnsafeNativeMethods+IHTMLFramesCollecti on2
UnsafeNativeMethods+IHTMLLocation 0.039 4 types 19 methods System.Windows.Forms .UnsafeNativeMethods+IHTMLLocation
UnsafeNativeMethods+IOmHistory 0.17 3 types 4 methods System.Windows.Forms .UnsafeNativeMethods+IOmHistory
UnsafeNativeMethods+IOmNavigator 0 1 type 19 methods System.Windows.Forms .UnsafeNativeMethods+IOmNavigator
UnsafeNativeMethods+IHTMLEventObj 0.14 5 types 25 methods System.Windows.Forms .UnsafeNativeMethods+IHTMLEventObj
UnsafeNativeMethods+IHTMLEventObj2 0 1 type 56 methods System.Windows.Forms .UnsafeNativeMethods+IHTMLEventObj2
UnsafeNativeMethods+IHTMLEventObj4 0 1 type 1 method System.Windows.Forms .UnsafeNativeMethods+IHTMLEventObj4
UnsafeNativeMethods+IHTMLElementCollecti on 0.083 4 types 6 methods System.Windows.Forms .UnsafeNativeMethods+IHTMLElementCollect ion
UnsafeNativeMethods+IHTMLElement 0.043 7 types 87 methods System.Windows.Forms .UnsafeNativeMethods+IHTMLElement
UnsafeNativeMethods+IHTMLElement2 0.065 3 types 98 methods System.Windows.Forms .UnsafeNativeMethods+IHTMLElement2
UnsafeNativeMethods+IHTMLElement3 0.035 2 types 43 methods System.Windows.Forms .UnsafeNativeMethods+IHTMLElement3
UnsafeNativeMethods+IHTMLStyle 0.0056 2 types 178 methods System.Windows.Forms .UnsafeNativeMethods+IHTMLStyle
UnsafeNativeMethods+ICorRuntimeHost 0.026 2 types 19 methods System.Windows.Forms .UnsafeNativeMethods+ICorRuntimeHost
UnsafeNativeMethods+IServiceProvider 0 1 type 1 method System.Windows.Forms .UnsafeNativeMethods+IServiceProvider
UnsafeNativeMethods+IAccessibleEx 0 1 type 4 methods System.Windows.Forms .UnsafeNativeMethods+IAccessibleEx
PropertyGridView+IMouseHookClient 0.5 2 types 1 method System.Windows.Forms .PropertyGridInternal .PropertyGridView+IMouseHookClient
IArrangedElement 0.12 32 types 9 methods System.Windows.Forms.Layout .IArrangedElement
IDataPointCustomPropertiesProvider 1 1 type 1 method System.Windows.Forms.DataVisualization .Charting .IDataPointCustomPropertiesProvider
IChartElement 0.25 4 types 4 methods System.Windows.Forms.DataVisualization .Charting.IChartElement
INameController 0.57 1 type 7 methods System.Windows.Forms.DataVisualization .Charting.INameController
IChartRenderingEngine 0.93 1 type 45 methods System.Windows.Forms.DataVisualization .Charting.IChartRenderingEngine
IDesignerMessageBoxDialog 0.5 2 types 1 method System.Windows.Forms.DataVisualization .Charting.IDesignerMessageBoxDialog
IFormula 0.25 2 types 2 methods System.Windows.Forms.DataVisualization .Charting.Formulas.IFormula
IChartType 0.11 13 types 22 methods System.Windows.Forms.DataVisualization .Charting.ChartTypes.IChartType
ICircularChartType 0.17 5 types 6 methods System.Windows.Forms.DataVisualization .Charting.ChartTypes.ICircularChartType
IBorderType 0.3 4 types 5 methods System.Windows.Forms.DataVisualization .Charting.Borders3D.IBorderType
INotifyConnection2 0.5 2 types 2 methods System.Web.Services.Interop .INotifyConnection2
INotifySink2 0.5 2 types 4 methods System.Web.Services.Interop.INotifySink2
INotifySource2 0 1 type 1 method System.Web.Services.Interop .INotifySource2
IDeviceSpecificChoiceDesigner 0.5 4 types 2 methods System.Web.UI.Design.MobileControls .IDeviceSpecificChoiceDesigner
IDeviceSpecificDesigner 0.15 11 types 10 methods System.Web.UI.Design.MobileControls .IDeviceSpecificDesigner
IListDesigner 0.05 2 types 10 methods System.Web.UI.Design.MobileControls .IListDesigner
IRefreshableDeviceSpecificEditor 0.5 2 types 7 methods System.Web.UI.Design.MobileControls .IRefreshableDeviceSpecificEditor
NativeMethods+IStream 0 1 type 11 methods System.Web.UI.Design.MobileControls .NativeMethods+IStream
NativeMethods+IHTMLElement 0.0077 3 types 87 methods System.Web.UI.Design.MobileControls .NativeMethods+IHTMLElement
NativeMethods+IHTMLDocument2 0.0055 5 types 109 methods System.Web.UI.Design.MobileControls .NativeMethods+IHTMLDocument2
NativeMethods+IHTMLDocument3 0.012 2 types 41 methods System.Web.UI.Design.MobileControls .NativeMethods+IHTMLDocument3
NativeMethods+IHTMLStyleSheet 0 1 type 21 methods System.Web.UI.Design.MobileControls .NativeMethods+IHTMLStyleSheet
NativeMethods+IHTMLStyle 0 1 type 178 methods System.Web.UI.Design.MobileControls .NativeMethods+IHTMLStyle
NativeMethods+IHTMLElementCollection 0 1 type 6 methods System.Web.UI.Design.MobileControls .NativeMethods+IHTMLElementCollection
NativeMethods+IHTMLDOMNode 0 1 type 20 methods System.Web.UI.Design.MobileControls .NativeMethods+IHTMLDOMNode
NativeMethods+IOleContainer 0 2 types 3 methods System.Web.UI.Design.MobileControls .NativeMethods+IOleContainer
NativeMethods+IOleClientSite 0 1 type 6 methods System.Web.UI.Design.MobileControls .NativeMethods+IOleClientSite
NativeMethods+IOleDocumentSite 0 1 type 1 method System.Web.UI.Design.MobileControls .NativeMethods+IOleDocumentSite
NativeMethods+IOleDocumentView 0.15 2 types 13 methods System.Web.UI.Design.MobileControls .NativeMethods+IOleDocumentView
NativeMethods+IOleInPlaceSite 0 1 type 12 methods System.Web.UI.Design.MobileControls .NativeMethods+IOleInPlaceSite
NativeMethods+IOleInPlaceFrame 0 1 type 12 methods System.Web.UI.Design.MobileControls .NativeMethods+IOleInPlaceFrame
NativeMethods+IOleInPlaceUIWindow 0 2 types 6 methods System.Web.UI.Design.MobileControls .NativeMethods+IOleInPlaceUIWindow
NativeMethods+IDocHostUIHandler 0 1 type 15 methods System.Web.UI.Design.MobileControls .NativeMethods+IDocHostUIHandler
NativeMethods+IOleInPlaceActiveObject 0 2 types 7 methods System.Web.UI.Design.MobileControls .NativeMethods+IOleInPlaceActiveObject
NativeMethods+IOleObject 0.048 2 types 21 methods System.Web.UI.Design.MobileControls .NativeMethods+IOleObject
NativeMethods+IOleCommandTarget 0 2 types 2 methods System.Web.UI.Design.MobileControls .NativeMethods+IOleCommandTarget
NativeMethods+IOleDropTarget 0 2 types 4 methods System.Web.UI.Design.MobileControls .NativeMethods+IOleDropTarget
NativeMethods+IOleDataObject 0 2 types 9 methods System.Web.UI.Design.MobileControls .NativeMethods+IOleDataObject
NativeMethods+IEnumOLEVERB 0 1 type 4 methods System.Web.UI.Design.MobileControls .NativeMethods+IEnumOLEVERB
NativeMethods+IAdviseSink 0 1 type 5 methods System.Web.UI.Design.MobileControls .NativeMethods+IAdviseSink
NativeMethods+IHTMLBodyElement 0.014 2 types 35 methods System.Web.UI.Design.MobileControls .NativeMethods+IHTMLBodyElement
NativeMethods+IPersistStreamInit 0.083 2 types 6 methods System.Web.UI.Design.MobileControls .NativeMethods+IPersistStreamInit
NativeMethods+IHTMLElement2 0.0094 3 types 106 methods System.Web.UI.Design.MobileControls .NativeMethods+IHTMLElement2
NativeMethods+IHTMLRectCollection 0.33 2 types 3 methods System.Web.UI.Design.MobileControls .NativeMethods+IHTMLRectCollection
NativeMethods+IHTMLCurrentStyle 0 1 type 67 methods System.Web.UI.Design.MobileControls .NativeMethods+IHTMLCurrentStyle
NativeMethods+IHTMLRect 0.12 2 types 8 methods System.Web.UI.Design.MobileControls .NativeMethods+IHTMLRect
IListControl 1 1 type 2 methods System.Web.UI.MobileControls .IListControl
IScriptResourceHandler 1 1 type 3 methods System.Web.Handlers .IScriptResourceHandler
IContractGeneratorReferenceTypeLoader 0.5 2 types 3 methods System.Web.Compilation.WCFModel .IContractGeneratorReferenceTypeLoader
IContractGeneratorReferenceTypeLoader2 1 1 type 1 method System.Web.Compilation.WCFModel .IContractGeneratorReferenceTypeLoader2
IClientScriptManager 0.14 5 types 7 methods System.Web.UI.IClientScriptManager
IClientUrlResolver 0.4 5 types 2 methods System.Web.UI.IClientUrlResolver
ICompilationSection 1 1 type 1 method System.Web.UI.ICompilationSection
IControl 0.25 2 types 2 methods System.Web.UI.IControl
ICustomErrorsSection 0.5 2 types 2 methods System.Web.UI.ICustomErrorsSection
IDeploymentSection 1 1 type 1 method System.Web.UI.IDeploymentSection
IHtmlForm 0.33 3 types 4 methods System.Web.UI.IHtmlForm
IPage 0.12 8 types 31 methods System.Web.UI.IPage
IScriptManagerInternal 0.17 4 types 12 methods System.Web.UI.IScriptManagerInternal
IDynamicQueryable 0.14 2 types 7 methods System.Web.UI.WebControls .IDynamicQueryable
ILinqToSql 0.67 1 type 6 methods System.Web.UI.WebControls.ILinqToSql
ILinqDataSourceChooseContextType 0.44 2 types 8 methods System.Web.UI.Design.WebControls .ILinqDataSourceChooseContextType
ILinqDataSourceChooseContextTypePanel 0.5 2 types 4 methods System.Web.UI.Design.WebControls .ILinqDataSourceChooseContextTypePanel
ILinqDataSourceConfiguration 0.5 2 types 8 methods System.Web.UI.Design.WebControls .ILinqDataSourceConfiguration
ILinqDataSourceConfigurationPanel 0.5 2 types 8 methods System.Web.UI.Design.WebControls .ILinqDataSourceConfigurationPanel
ILinqDataSourceConfigureAdvanced 0.5 2 types 1 method System.Web.UI.Design.WebControls .ILinqDataSourceConfigureAdvanced
ILinqDataSourceConfigureAdvancedForm 0.33 3 types 4 methods System.Web.UI.Design.WebControls .ILinqDataSourceConfigureAdvancedForm
ILinqDataSourceConfigureGroupBy 0.42 2 types 6 methods System.Web.UI.Design.WebControls .ILinqDataSourceConfigureGroupBy
ILinqDataSourceConfigureGroupByPanel 0.33 3 types 7 methods System.Web.UI.Design.WebControls .ILinqDataSourceConfigureGroupByPanel
ILinqDataSourceConfigureOrderBy 0.33 2 types 3 methods System.Web.UI.Design.WebControls .ILinqDataSourceConfigureOrderBy
ILinqDataSourceConfigureOrderByForm 0.33 3 types 6 methods System.Web.UI.Design.WebControls .ILinqDataSourceConfigureOrderByForm
ILinqDataSourceConfigureSelect 0.42 2 types 6 methods System.Web.UI.Design.WebControls .ILinqDataSourceConfigureSelect
ILinqDataSourceConfigureSelectPanel 0.33 3 types 22 methods System.Web.UI.Design.WebControls .ILinqDataSourceConfigureSelectPanel
ILinqDataSourceConfigureWhere 0.25 4 types 16 methods System.Web.UI.Design.WebControls .ILinqDataSourceConfigureWhere
ILinqDataSourceConfigureWhereForm 0.28 4 types 15 methods System.Web.UI.Design.WebControls .ILinqDataSourceConfigureWhereForm
ILinqDataSourceContextTypeItem 0.22 9 types 3 methods System.Web.UI.Design.WebControls .ILinqDataSourceContextTypeItem
ILinqDataSourceDesignerHelper 0.086 13 types 67 methods System.Web.UI.Design.WebControls .ILinqDataSourceDesignerHelper
ILinqDataSourceProjection 0.25 5 types 8 methods System.Web.UI.Design.WebControls .ILinqDataSourceProjection
ILinqDataSourcePropertyItem 0.099 22 types 11 methods System.Web.UI.Design.WebControls .ILinqDataSourcePropertyItem
ILinqDataSourceStatementEditorForm 0.38 2 types 4 methods System.Web.UI.Design.WebControls .ILinqDataSourceStatementEditorForm
ILinqDataSourceWizardForm 0.33 6 types 2 methods System.Web.UI.Design.WebControls .ILinqDataSourceWizardForm
ILinqDataSourceWrapper 0.5 2 types 44 methods System.Web.UI.Design.WebControls .ILinqDataSourceWrapper
IMetaChildrenColumn 0.17 1 type 6 methods System.Web.DynamicData .IMetaChildrenColumn
IMetaColumn 0.073 6 types 39 methods System.Web.DynamicData.IMetaColumn
IMetaForeignKeyColumn 0.17 2 types 9 methods System.Web.DynamicData .IMetaForeignKeyColumn
IMetaModel 0.019 3 types 18 methods System.Web.DynamicData.IMetaModel
IMetaTable 0.035 10 types 43 methods System.Web.DynamicData.IMetaTable
MetaColumn+IMetaColumnMetadata 0.37 3 types 20 methods System.Web.DynamicData .MetaColumn+IMetaColumnMetadata
IClrStrongNameUsingIntPtr 0.24 1 type 25 methods Microsoft.Runtime.Hosting .IClrStrongNameUsingIntPtr
IClrStrongName 0.36 1 type 25 methods Microsoft.Runtime.Hosting.IClrStrongName
IRequestCompletedNotifier 0.5 2 types 1 method System.Web.IRequestCompletedNotifier
IBufferAllocator 0.083 3 types 4 methods System.Web.IBufferAllocator
IBufferAllocator<T> 0.33 4 types 3 methods System.Web.IBufferAllocator<T>
IAllocatorProvider 0.25 5 types 4 methods System.Web.IAllocatorProvider
HttpApplication+IExecutionStep 0.2 5 types 3 methods System.Web .HttpApplication+IExecutionStep
IHttpResponseElement 0.83 2 types 3 methods System.Web.IHttpResponseElement
IHttpHandlerFactory2 1 1 type 1 method System.Web.IHttpHandlerFactory2
IPartitionInfo 0.25 4 types 1 method System.Web.IPartitionInfo
IAsyncAbortableWebSocket 0.5 2 types 1 method System.Web.WebSockets .IAsyncAbortableWebSocket
IWebSocketPipe 0.5 2 types 4 methods System.Web.WebSockets.IWebSocketPipe
IUnmanagedWebSocketContext 0.5 2 types 5 methods System.Web.WebSockets .IUnmanagedWebSocketContext
IPerfCounters 0.12 4 types 4 methods System.Web.Util.IPerfCounters
ISyncContextLock 0.33 3 types 1 method System.Web.Util.ISyncContextLock
ISyncContext 0.2 5 types 2 methods System.Web.Util.ISyncContext
ITypedWebObjectFactory 1 4 types 1 method System.Web.Util.ITypedWebObjectFactory
ICustomRuntimeRegistrationToken 0 2 types 1 method System.Web.Hosting .ICustomRuntimeRegistrationToken
IProcessSuspendListener 1 1 type 1 method System.Web.Hosting .IProcessSuspendListener
IProcessResumeCallback 0.5 2 types 1 method System.Web.Hosting .IProcessResumeCallback
ICustomRuntime 0 3 types 3 methods System.Web.Hosting.ICustomRuntime
IStateFormatter2 0.62 8 types 2 methods System.Web.UI.IStateFormatter2
IPageAsyncTask 0.5 2 types 1 method System.Web.UI.IPageAsyncTask
IAssemblyDependencyParser 1 1 type 1 method System.Web.UI.IAssemblyDependencyParser
IScriptResourceMapping 0.5 3 types 2 methods System.Web.UI.IScriptResourceMapping
IScriptResourceDefinition 0.33 3 types 8 methods System.Web.UI.IScriptResourceDefinition
IScriptManager 0.15 11 types 17 methods System.Web.UI.IScriptManager
ITagNameToTypeMapper 1 1 type 1 method System.Web.UI.ITagNameToTypeMapper
IRenderOuterTableControl 1 1 type 3 methods System.Web.UI.IRenderOuterTableControl
IWizardSideBarListControl 0.1 5 types 12 methods System.Web.UI.WebControls .IWizardSideBarListControl
IWebPartMenuUser 1 1 type 16 methods System.Web.UI.WebControls.WebParts .IWebPartMenuUser
NativeComInterfaces+IAdsPathname 0.12 3 types 11 methods System.Web.Security .NativeComInterfaces+IAdsPathname
NativeComInterfaces+IAdsLargeInteger 0.5 3 types 4 methods System.Web.Security .NativeComInterfaces+IAdsLargeInteger
IDataProtectorFactory 0.5 2 types 1 method System.Web.Security.Cryptography .IDataProtectorFactory
ICryptoServiceProvider 1 1 type 1 method System.Web.Security.Cryptography .ICryptoServiceProvider
IMasterKeyProvider 0.5 2 types 2 methods System.Web.Security.Cryptography .IMasterKeyProvider
ICryptoAlgorithmFactory 0.5 2 types 2 methods System.Web.Security.Cryptography .ICryptoAlgorithmFactory
ICryptoService 0.83 6 types 2 methods System.Web.Security.Cryptography .ICryptoService
IAssemblyCache 0.2 2 types 5 methods System.Web.Configuration.IAssemblyCache
IConfigMapPath2 0.67 2 types 3 methods System.Web.Configuration.IConfigMapPath2
IServerConfig 0.2 6 types 5 methods System.Web.Configuration.IServerConfig
IServerConfig2 1 1 type 1 method System.Web.Configuration.IServerConfig2
IDataPointCustomPropertiesProvider 1 1 type 1 method System.Web.UI.DataVisualization.Charting .IDataPointCustomPropertiesProvider
IChartElement 0.25 3 types 4 methods System.Web.UI.DataVisualization.Charting .IChartElement
INameController 0.57 1 type 7 methods System.Web.UI.DataVisualization.Charting .INameController
IChartRenderingEngine 0.93 1 type 45 methods System.Web.UI.DataVisualization.Charting .IChartRenderingEngine
IDesignerMessageBoxDialog 0.5 2 types 1 method System.Web.UI.DataVisualization.Charting .IDesignerMessageBoxDialog
IFormula 0.25 2 types 2 methods System.Web.UI.DataVisualization.Charting .Formulas.IFormula
IChartType 0.11 14 types 22 methods System.Web.UI.DataVisualization.Charting .ChartTypes.IChartType
ICircularChartType 0.17 5 types 6 methods System.Web.UI.DataVisualization.Charting .ChartTypes.ICircularChartType
IBorderType 0.3 4 types 5 methods System.Web.UI.DataVisualization.Charting .Borders3D.IBorderType
IMembershipAdapter 0.27 3 types 5 methods System.Web.Security.IMembershipAdapter
ICustomLoaderHelperFunctions 0.5 2 types 4 methods System.Web.Hosting .ICustomLoaderHelperFunctions
IPromotedEnlistment 0.089 14 types 12 methods System.Transactions.IPromotedEnlistment
IEnlistmentNotificationInternal 0.28 8 types 4 methods System.Transactions .IEnlistmentNotificationInternal
ISinglePhaseNotificationInternal 0.25 4 types 1 method System.Transactions .ISinglePhaseNotificationInternal
IVoterBallotShim 0.5 2 types 1 method System.Transactions.Oletx .IVoterBallotShim
IPhase0EnlistmentShim 0.38 4 types 2 methods System.Transactions.Oletx .IPhase0EnlistmentShim
IEnlistmentShim 0.5 2 types 3 methods System.Transactions.Oletx .IEnlistmentShim
ITransactionShim 0.25 4 types 8 methods System.Transactions.Oletx .ITransactionShim
IResourceManagerShim 0.44 3 types 3 methods System.Transactions.Oletx .IResourceManagerShim
IDtcProxyShimFactory 0.2 5 types 8 methods System.Transactions.Oletx .IDtcProxyShimFactory
ITransactionNativeInternal 0.33 1 type 3 methods System.Transactions.Oletx .ITransactionNativeInternal
IWebFaultException 1 1 type 4 methods System.ServiceModel.Web .IWebFaultException
IDuplexRouterCallback 0.33 3 types 2 methods System.ServiceModel.Routing .IDuplexRouterCallback
IRoutingClient 0.23 5 types 7 methods System.ServiceModel.Routing .IRoutingClient
IAsyncEventArgs 0.7 5 types 2 methods System.Runtime.IAsyncEventArgs
IClassFactory 0.25 2 types 2 methods IClassFactory
IOperationContractAttributeProvider 1 1 type 1 method System.ServiceModel .IOperationContractAttributeProvider
ICatalog2 0.018 1 type 57 methods System.ServiceModel.ComIntegration .ICatalog2
ICatalogObject 0.24 3 types 7 methods System.ServiceModel.ComIntegration .ICatalogObject
ICatalogCollection 0.17 3 types 16 methods System.ServiceModel.ComIntegration .ICatalogCollection
ICreateServiceChannel 1 1 type 1 method System.ServiceModel.ComIntegration .ICreateServiceChannel
IMoniker 0 1 type 20 methods System.ServiceModel.ComIntegration .IMoniker
IParseDisplayName 0 1 type 1 method System.ServiceModel.ComIntegration .IParseDisplayName
IProvideChannelBuilderSettings 0.12 4 types 4 methods System.ServiceModel.ComIntegration .IProvideChannelBuilderSettings
IProxyCreator 0.5 2 types 4 methods System.ServiceModel.ComIntegration .IProxyCreator
IProxyManager 0 4 types 6 methods System.ServiceModel.ComIntegration .IProxyManager
IProxyProvider 0.5 2 types 2 methods System.ServiceModel.ComIntegration .IProxyProvider
IPseudoDispatch 0 1 type 2 methods System.ServiceModel.ComIntegration .IPseudoDispatch
ITransactionProxy 0 1 type 7 methods System.ServiceModel.ComIntegration .ITransactionProxy
ITransactionVoterBallotAsync2 0 1 type 1 method System.ServiceModel.ComIntegration .ITransactionVoterBallotAsync2
ITransactionVoterNotifyAsync2 0.4 2 types 5 methods System.ServiceModel.ComIntegration .ITransactionVoterNotifyAsync2
ITypeCacheManager 0.33 3 types 4 methods System.ServiceModel.ComIntegration .ITypeCacheManager
IPersistStream 0.2 3 types 5 methods System.ServiceModel.ComIntegration .IPersistStream
IServiceThreadPoolConfig 1 1 type 2 methods System.ServiceModel.ComIntegration .IServiceThreadPoolConfig
IServicePartitionConfig 1 1 type 2 methods System.ServiceModel.ComIntegration .IServicePartitionConfig
IServiceSysTxnConfig 0.14 1 type 7 methods System.ServiceModel.ComIntegration .IServiceSysTxnConfig
IServiceSxsConfig 1 1 type 3 methods System.ServiceModel.ComIntegration .IServiceSxsConfig
IServiceTransactionConfig 0.17 1 type 6 methods System.ServiceModel.ComIntegration .IServiceTransactionConfig
IServiceCall 0 1 type 1 method System.ServiceModel.ComIntegration .IServiceCall
IServiceActivity 0.25 2 types 4 methods System.ServiceModel.ComIntegration .IServiceActivity
IComThreadingInfo 0.17 3 types 4 methods System.ServiceModel.ComIntegration .IComThreadingInfo
IObjectContextInfo 0.3 2 types 5 methods System.ServiceModel.ComIntegration .IObjectContextInfo
IContractResolver 0.2 5 types 1 method System.ServiceModel.Description .IContractResolver
ServiceMetadataExtension+IHttpGetMetadat a 0 2 types 1 method System.ServiceModel.Description .ServiceMetadataExtension+IHttpGetMetada ta
IWrappedBodyTypeGenerator 0.25 4 types 3 methods System.ServiceModel.Description .IWrappedBodyTypeGenerator
WbemNative+IWbemProviderInit 0 1 type 1 method System.ServiceModel.Administration .WbemNative+IWbemProviderInit
WbemNative+IWbemDecoupledRegistrar 0.5 2 types 2 methods System.ServiceModel.Administration .WbemNative+IWbemDecoupledRegistrar
WbemNative+IWbemServices 0.022 4 types 23 methods System.ServiceModel.Administration .WbemNative+IWbemServices
WbemNative+IWbemClassObject 0.056 6 types 24 methods System.ServiceModel.Administration .WbemNative+IWbemClassObject
WbemNative+IWbemContext 0 5 types 9 methods System.ServiceModel.Administration .WbemNative+IWbemContext
WbemNative+IWbemProviderInitSink 0.5 2 types 1 method System.ServiceModel.Administration .WbemNative+IWbemProviderInitSink
WbemNative+IWbemObjectSink 0.33 6 types 2 methods System.ServiceModel.Administration .WbemNative+IWbemObjectSink
WbemNative+IEnumWbemClassObject 0 2 types 5 methods System.ServiceModel.Administration .WbemNative+IEnumWbemClassObject
WbemNative+IWbemQualifierSet 0 1 type 7 methods System.ServiceModel.Administration .WbemNative+IWbemQualifierSet
IWmiProvider 0.5 2 types 5 methods System.ServiceModel.Administration .IWmiProvider
IWmiInstances 0.75 8 types 2 methods System.ServiceModel.Administration .IWmiInstances
IWmiInstance 0.44 22 types 3 methods System.ServiceModel.Administration .IWmiInstance
IWmiMethodContext 0.27 3 types 5 methods System.ServiceModel.Administration .IWmiMethodContext
IWmiInstanceProvider 1 3 types 2 methods System.ServiceModel.Administration .IWmiInstanceProvider
IFunctionLibrary 1 1 type 1 method System.ServiceModel.Dispatcher .IFunctionLibrary
INodeCounter 0.5 2 types 6 methods System.ServiceModel.Dispatcher .INodeCounter
IItemComparer<K,V> 0.5 2 types 1 method System.ServiceModel.Dispatcher .IItemComparer<K,V>
ConcurrencyBehavior+IWaiter 0.5 2 types 1 method System.ServiceModel.Dispatcher .ConcurrencyBehavior+IWaiter
IClientFaultFormatter 0.33 6 types 1 method System.ServiceModel.Dispatcher .IClientFaultFormatter
IDispatchFaultFormatter 0.22 9 types 1 method System.ServiceModel.Dispatcher .IDispatchFaultFormatter
IDispatchFaultFormatterWrapper 0.5 1 type 2 methods System.ServiceModel.Dispatcher .IDispatchFaultFormatterWrapper
IChannelBinder 0.076 23 types 20 methods System.ServiceModel.Dispatcher .IChannelBinder
IListenerBinder 0.3 4 types 5 methods System.ServiceModel.Dispatcher .IListenerBinder
IManualConcurrencyOperationInvoker 0.56 3 types 3 methods System.ServiceModel.Dispatcher .IManualConcurrencyOperationInvoker
IInvokeReceivedNotification 0.19 8 types 2 methods System.ServiceModel.Dispatcher .IInvokeReceivedNotification
IResumeMessageRpc 0.17 8 types 6 methods System.ServiceModel.Dispatcher .IResumeMessageRpc
IInstanceTransaction 1 1 type 1 method System.ServiceModel.Dispatcher .IInstanceTransaction
IInstanceContextManager 0.4 1 type 10 methods System.ServiceModel.Dispatcher .IInstanceContextManager
ISessionThrottleNotification 1 1 type 1 method System.ServiceModel.Dispatcher .ISessionThrottleNotification
IConfigurationContextProviderInternal 0.33 3 types 2 methods System.ServiceModel.Configuration .IConfigurationContextProviderInternal
ILockingQueue 1 1 type 2 methods System.ServiceModel.Channels .ILockingQueue
IChannelDemuxer 1 2 types 7 methods System.ServiceModel.Channels .IChannelDemuxer
IChannelDemuxFailureHandler 0.16 11 types 4 methods System.ServiceModel.Channels .IChannelDemuxFailureHandler
IChannelAcceptor<TChannel> 0 12 types 6 methods System.ServiceModel.Channels .IChannelAcceptor<TChannel>
IRequestReplyCorrelator 0.17 6 types 2 methods System.ServiceModel.Channels .IRequestReplyCorrelator
ICorrelatorKey 0.5 2 types 2 methods System.ServiceModel.Channels .ICorrelatorKey
ICommunicationWaiter 0.75 2 types 2 methods System.ServiceModel.Channels .ICommunicationWaiter
RemoteEndpointMessageProperty+IRemoteEnd pointProvider 0.5 2 types 2 methods System.ServiceModel.Channels .RemoteEndpointMessageProperty+IRemoteEn dpointProvider
IRequestBase 0.33 1 type 3 methods System.ServiceModel.Channels .IRequestBase
IRequest 0 3 types 2 methods System.ServiceModel.Channels.IRequest
IAsyncRequest 0 3 types 2 methods System.ServiceModel.Channels .IAsyncRequest
IConnectionOrientedListenerSettings 0 5 types 4 methods System.ServiceModel.Channels .IConnectionOrientedListenerSettings
ITransportFactorySettings 0.2 16 types 5 methods System.ServiceModel.Channels .ITransportFactorySettings
IConnectionOrientedTransportFactorySetti ngs 0.092 19 types 4 methods System.ServiceModel.Channels .IConnectionOrientedTransportFactorySett ings
IConnectionOrientedTransportChannelFacto rySettings 0 6 types 2 methods System.ServiceModel.Channels .IConnectionOrientedTransportChannelFact orySettings
ITcpChannelFactorySettings 0.5 2 types 1 method System.ServiceModel.Channels .ITcpChannelFactorySettings
IHttpTransportFactorySettings 0.042 12 types 2 methods System.ServiceModel.Channels .IHttpTransportFactorySettings
IPipeTransportFactorySettings 0.33 3 types 1 method System.ServiceModel.Channels .IPipeTransportFactorySettings
ITransportManagerRegistration 0 7 types 3 methods System.ServiceModel.Channels .ITransportManagerRegistration
IChannelBindingProvider 0.5 11 types 2 methods System.ServiceModel.Channels .IChannelBindingProvider
IStreamUpgradeChannelBindingProvider 0.5 6 types 2 methods System.ServiceModel.Channels .IStreamUpgradeChannelBindingProvider
IConnection 0.078 62 types 19 methods System.ServiceModel.Channels.IConnection
IConnectionInitiator 0.095 7 types 3 methods System.ServiceModel.Channels .IConnectionInitiator
IConnectionListener 0.12 8 types 3 methods System.ServiceModel.Channels .IConnectionListener
IMessageSource 0.14 7 types 6 methods System.ServiceModel.Channels .IMessageSource
ISingletonChannelListener 0.14 7 types 2 methods System.ServiceModel.Channels .ISingletonChannelListener
ISocketListenerSettings 0.5 2 types 3 methods System.ServiceModel.Channels .ISocketListenerSettings
HttpChannelListener+IHttpAuthenticationC ontext 0.38 2 types 4 methods System.ServiceModel.Channels .HttpChannelListener+IHttpAuthentication Context
HttpRequestMessageProperty+IHttpHeaderPr ovider 0.25 4 types 1 method System.ServiceModel.Channels .HttpRequestMessageProperty+IHttpHeaderP rovider
IWebMessageEncoderHelper 1 1 type 1 method System.ServiceModel.Channels .IWebMessageEncoderHelper
ITransportPolicyImport 1 2 types 1 method System.ServiceModel.Channels .ITransportPolicyImport
IPoisonHandlingStrategy 0.5 2 types 3 methods System.ServiceModel.Channels .IPoisonHandlingStrategy
IMsmqMessagePool 0.25 4 types 2 methods System.ServiceModel.Channels .IMsmqMessagePool
IPostRollbackErrorStrategy 1 2 types 1 method System.ServiceModel.Channels .IPostRollbackErrorStrategy
MsmqUri+IAddressTranslator 0.29 26 types 3 methods System.ServiceModel.Channels .MsmqUri+IAddressTranslator
IReliableChannelBinder 0.07 47 types 36 methods System.ServiceModel.Channels .IReliableChannelBinder
IClientReliableChannelBinder 0.083 16 types 9 methods System.ServiceModel.Channels .IClientReliableChannelBinder
IServerReliableChannelBinder 0.12 24 types 5 methods System.ServiceModel.Channels .IServerReliableChannelBinder
IReliableFactorySettings 0.19 10 types 10 methods System.ServiceModel.Channels .IReliableFactorySettings
DatagramAdapter+DatagramAdapterListenerB ase<TChannel,TSessionChannel,ItemType >+IWaiter 0 1 type 1 method System.ServiceModel.Channels .DatagramAdapter+DatagramAdapterListener Base<TChannel,TSessionChannel,ItemType >+IWaiter
IMergeEnabledMessageProperty 1 1 type 1 method System.ServiceModel.Channels .IMergeEnabledMessageProperty
IBufferedMessageData 0.27 10 types 9 methods System.ServiceModel.Channels .IBufferedMessageData
ICompressedMessageEncoder 0.67 4 types 3 methods System.ServiceModel.Channels .ICompressedMessageEncoder
ITransportCompressionSupport 0.33 3 types 1 method System.ServiceModel.Channels .ITransportCompressionSupport
IPeerNeighbor 0.11 18 types 18 methods System.ServiceModel.Channels .IPeerNeighbor
IPeerFactory 0.28 4 types 8 methods System.ServiceModel.Channels .IPeerFactory
IFlooderForThrottle 0.5 1 type 2 methods System.ServiceModel.Channels .IFlooderForThrottle
IPeerMaintainer 1 1 type 17 methods System.ServiceModel.Channels .IPeerMaintainer
IConnectAlgorithms 1 1 type 4 methods System.ServiceModel.Channels .IConnectAlgorithms
IPeerNodeMessageHandling 0.071 6 types 7 methods System.ServiceModel.Channels .IPeerNodeMessageHandling
IPeerConnectorContract 0.5 2 types 4 methods System.ServiceModel.Channels .IPeerConnectorContract
IPeerFlooderContract<TFloodContract ,TLinkContract> 0.5 2 types 3 methods System.ServiceModel.Channels .IPeerFlooderContract<TFloodContract ,TLinkContract>
IPeerServiceContract 0.2 1 type 10 methods System.ServiceModel.Channels .IPeerServiceContract
ITransactionChannel 0.25 1 type 4 methods System.ServiceModel.Channels .ITransactionChannel
WSTrustDec2005+DriverDec2005+IWsTrustDec 2005SecurityTokenService 0 2 types 1 method System.ServiceModel.Security .WSTrustDec2005+DriverDec2005+IWsTrustDe c2005SecurityTokenService
WSTrustFeb2005+DriverFeb2005+IWsTrustFeb 2005SecurityTokenService 0 2 types 1 method System.ServiceModel.Security .WSTrustFeb2005+DriverFeb2005+IWsTrustFe b2005SecurityTokenService
IChannelSecureConversationSessionSetting s 0 1 type 6 methods System.ServiceModel.Security .IChannelSecureConversationSessionSettin gs
IListenerSecureConversationSessionSettin gs 0 1 type 12 methods System.ServiceModel.Security .IListenerSecureConversationSessionSetti ngs
ISecurityCommunicationObject 1 1 type 14 methods System.ServiceModel.Security .ISecurityCommunicationObject
TimeBoundedCache+IExpirableItem 0.5 4 types 1 method System.ServiceModel.Security .TimeBoundedCache+IExpirableItem
ISecurityContextSecurityTokenCacheProvid er 1 2 types 1 method System.ServiceModel.Security.Tokens .ISecurityContextSecurityTokenCacheProvi der
IAspNetMessageProperty 0.17 6 types 4 methods System.ServiceModel.Activation .IAspNetMessageProperty
IConnectionDuplicator 1 1 type 2 methods System.ServiceModel.Activation .IConnectionDuplicator
IConnectionRegister 0.67 1 type 3 methods System.ServiceModel.Activation .IConnectionRegister
IConnectionRegisterAsync 0.5 2 types 2 methods System.ServiceModel.Activation .IConnectionRegisterAsync
ListenerUnsafeNativeMethods+ICorRuntimeH ost 0.045 2 types 11 methods System.ServiceModel.Activation .ListenerUnsafeNativeMethods+ICorRuntime Host
IAnnouncementInnerClient 0.25 4 types 19 methods System.ServiceModel.Discovery .IAnnouncementInnerClient
IAnnouncementServiceImplementation 0 6 types 5 methods System.ServiceModel.Discovery .IAnnouncementServiceImplementation
IDiscoveryInnerClient 0.25 4 types 12 methods System.ServiceModel.Discovery .IDiscoveryInnerClient
IDiscoveryInnerClientResponse 0.42 8 types 5 methods System.ServiceModel.Discovery .IDiscoveryInnerClientResponse
IDiscoveryServiceImplementation 0 10 types 6 methods System.ServiceModel.Discovery .IDiscoveryServiceImplementation
IDiscoveryVersionImplementation 0.14 10 types 11 methods System.ServiceModel.Discovery .IDiscoveryVersionImplementation
IMulticastSuppressionImplementation 0 6 types 4 methods System.ServiceModel.Discovery .IMulticastSuppressionImplementation
IAnnouncementContractCD1 0.5 2 types 6 methods System.ServiceModel.Discovery.VersionCD1 .IAnnouncementContractCD1
IDiscoveryContractAdhocCD1 0.33 3 types 6 methods System.ServiceModel.Discovery.VersionCD1 .IDiscoveryContractAdhocCD1
IDiscoveryContractManagedCD1 0.5 2 types 6 methods System.ServiceModel.Discovery.VersionCD1 .IDiscoveryContractManagedCD1
IDiscoveryResponseContractCD1 0.67 2 types 6 methods System.ServiceModel.Discovery.VersionCD1 .IDiscoveryResponseContractCD1
IAnnouncementContractApril2005 0.5 2 types 6 methods System.ServiceModel.Discovery .VersionApril2005 .IAnnouncementContractApril2005
IDiscoveryContractApril2005 1 1 type 6 methods System.ServiceModel.Discovery .VersionApril2005 .IDiscoveryContractApril2005
IDiscoveryResponseContractApril2005 0.67 2 types 6 methods System.ServiceModel.Discovery .VersionApril2005 .IDiscoveryResponseContractApril2005
IAnnouncementContract11 0.5 2 types 6 methods System.ServiceModel.Discovery.Version11 .IAnnouncementContract11
IDiscoveryContractAdhoc11 0.33 3 types 6 methods System.ServiceModel.Discovery.Version11 .IDiscoveryContractAdhoc11
IDiscoveryContractManaged11 0.5 2 types 6 methods System.ServiceModel.Discovery.Version11 .IDiscoveryContractManaged11
IDiscoveryResponseContract11 0.67 2 types 6 methods System.ServiceModel.Discovery.Version11 .IDiscoveryResponseContract11
IUdpReceiveHandler 1 1 type 3 methods System.ServiceModel.Channels .IUdpReceiveHandler
IServiceModelActivationHandler 0.5 2 types 1 method System.ServiceModel.Activation .IServiceModelActivationHandler
IMSAdminBase 0.097 1 type 31 methods System.ServiceModel.Activation .IMSAdminBase
ICanonicalizableNode 0.33 3 types 4 methods System.Security.Cryptography.Xml .ICanonicalizableNode
IStorageFolderHandleAccess 1 1 type 1 method System.IO.IStorageFolderHandleAccess
IStorageItemHandleAccess 1 1 type 1 method System.IO.IStorageItemHandleAccess
IDispatcherQueue 0.17 2 types 3 methods System.Threading.IDispatcherQueue
IBufferByteAccess 1 1 type 1 method System.Runtime.InteropServices .WindowsRuntime.IBufferByteAccess
IRestrictedErrorInfo 1 1 type 2 methods System.Runtime.InteropServices .WindowsRuntime.IRestrictedErrorInfo
ISerParser 0.5 2 types 1 method System.Runtime.Serialization.Formatters .Soap.ISerParser
IDataNode 0.15 10 types 18 methods System.Runtime.Serialization.IDataNode
IGenericNameProvider 0 2 types 6 methods System.Runtime.Serialization .IGenericNameProvider
IByteBufferPool 0.23 15 types 2 methods System.IO.IByteBufferPool
WsdlParser+IDump 1 1 type 1 method System.Runtime.Remoting.MetadataServices .WsdlParser+IDump
WsdlParser+INamespaces 0 1 type 1 method System.Runtime.Remoting.MetadataServices .WsdlParser+INamespaces
ICancelable 1 1 type 1 method System.Runtime.ICancelable
IPersistencePipelineModule 0.16 8 types 11 methods System.Runtime .IPersistencePipelineModule
IDurableInstancingOptions 1 1 type 1 method System.Runtime.DurableInstancing .IDurableInstancingOptions
IPersistStream 0 2 types 5 methods System.Messaging.Interop.IPersistStream
IPersistStreamInit 0.17 1 type 6 methods System.Messaging.Interop .IPersistStreamInit
IStream 0 2 types 11 methods System.Messaging.Interop.IStream
ITransaction 0.17 4 types 3 methods System.Messaging.Interop.ITransaction
IWbemPathKeyList 0.2 1 type 10 methods WmiNative.IWbemPathKeyList
IWbemPath 0.15 1 type 26 methods WmiNative.IWbemPath
IWbemDecoupledRegistrar 1 1 type 2 methods WmiNative.IWbemDecoupledRegistrar
IWbemServices 0.043 1 type 23 methods WmiNative.IWbemServices
IWbemClassObject 0.065 7 types 24 methods WmiNative.IWbemClassObject
IWbemContext 0 4 types 9 methods WmiNative.IWbemContext
IWbemProviderInitSink 0.5 2 types 1 method WmiNative.IWbemProviderInitSink
IWbemObjectSink 0.33 3 types 2 methods WmiNative.IWbemObjectSink
IEnumWbemClassObject 0 2 types 5 methods WmiNative.IEnumWbemClassObject
IWbemQualifierSet 0.14 1 type 7 methods WmiNative.IWbemQualifierSet
ICIMResultHandler 0.2 3 types 5 methods System.Management.Instrumentation .ICIMResultHandler
ICIMQuery 0 1 type 1 method System.Management.Instrumentation .ICIMQuery
ICIMEnumerate 0.5 2 types 1 method System.Management.Instrumentation .ICIMEnumerate
ICIMGet 0.5 2 types 1 method System.Management.Instrumentation .ICIMGet
ICIMDelete 0.5 2 types 1 method System.Management.Instrumentation .ICIMDelete
ICIMUpdate 0.5 2 types 1 method System.Management.Instrumentation .ICIMUpdate
ICIMExecute 0.5 2 types 1 method System.Management.Instrumentation .ICIMExecute
ICIMCapabilities 0.83 1 type 6 methods System.Management.Instrumentation .ICIMCapabilities
IWbemClassObject_DoNotMarshal 0 5 types 24 methods System.Management .IWbemClassObject_DoNotMarshal
IWbemLocator 0 1 type 1 method System.Management.IWbemLocator
IWbemContext 0.014 16 types 9 methods System.Management.IWbemContext
IWbemServices 0.041 19 types 23 methods System.Management.IWbemServices
IWbemCallResult 0.5 1 type 4 methods System.Management.IWbemCallResult
IWbemObjectSink 0.11 9 types 2 methods System.Management.IWbemObjectSink
IEnumWbemClassObject 0.053 15 types 5 methods System.Management.IEnumWbemClassObject
IWbemObjectTextSrc 0.5 1 type 2 methods System.Management.IWbemObjectTextSrc
IWbemStatusCodeText 0.5 1 type 2 methods System.Management.IWbemStatusCodeText
IWbemProviderInitSink 1 1 type 1 method System.Management.IWbemProviderInitSink
IWbemDecoupledRegistrar 1 1 type 2 methods System.Management .IWbemDecoupledRegistrar
IWbemPathKeyList 0.2 1 type 10 methods System.Management.IWbemPathKeyList
IWbemPath 0.46 1 type 26 methods System.Management.IWbemPath
IMetaDataDispenser 0.33 1 type 3 methods System.Management.Instrumentation .IMetaDataDispenser
IMetaDataImportInternalOnly 0.12 1 type 8 methods System.Management.Instrumentation .IMetaDataImportInternalOnly
ILog 1 1 type 7 methods System.IO.Log.ILog
IFileBasedLogInit 1 1 type 1 method System.IO.Log.IFileBasedLogInit
ISspiNegotiation 0.1 11 types 8 methods System.ServiceModel.Security .ISspiNegotiation
ISspiNegotiationInfo 1 1 type 1 method System.ServiceModel.Security .ISspiNegotiationInfo
IPrefixGenerator 0 2 types 1 method System.IdentityModel.IPrefixGenerator
ISecurityElement 0.29 7 types 3 methods System.IdentityModel.ISecurityElement
ISignatureValueSecurityElement 0 5 types 1 method System.IdentityModel .ISignatureValueSecurityElement
ICanonicalWriterEndRootElementCallback 1 1 type 1 method System.IdentityModel .ICanonicalWriterEndRootElementCallback
IIdentityInfo 1 1 type 1 method System.IdentityModel.Policy .IIdentityInfo
IClrStrongNameUsingIntPtr 0.24 1 type 25 methods Microsoft.Runtime.Hosting .IClrStrongNameUsingIntPtr
IClrStrongName 0.36 1 type 25 methods Microsoft.Runtime.Hosting.IClrStrongName
IGetContextProperties 0.33 1 type 3 methods System.EnterpriseServices .IGetContextProperties
IContextProperties 0.2 1 type 5 methods System.EnterpriseServices .IContextProperties
IObjectConstruct 0 1 type 1 method System.EnterpriseServices .IObjectConstruct
IObjectConstructString 1 2 types 1 method System.EnterpriseServices .IObjectConstructString
IObjectContext 0.12 2 types 8 methods System.EnterpriseServices.IObjectContext
IObjectContextInfo 0.4 1 type 5 methods System.EnterpriseServices .IObjectContextInfo
IObjectContextInfo2 0.38 1 type 8 methods System.EnterpriseServices .IObjectContextInfo2
IObjectControl 0 2 types 3 methods System.EnterpriseServices.IObjectControl
ITransactionProxy 0 1 type 7 methods System.EnterpriseServices .ITransactionProxy
ITransactionVoterBallotAsync2 0 1 type 1 method System.EnterpriseServices .ITransactionVoterBallotAsync2
ITransactionVoterNotifyAsync2 0.4 2 types 5 methods System.EnterpriseServices .ITransactionVoterNotifyAsync2
ISharedProperty 0.5 2 types 2 methods System.EnterpriseServices .ISharedProperty
ISharedPropertyGroup 0.5 2 types 4 methods System.EnterpriseServices .ISharedPropertyGroup
ISharedPropertyGroupManager 1 1 type 3 methods System.EnterpriseServices .ISharedPropertyGroupManager
IManagedObject 0 3 types 2 methods System.EnterpriseServices.IManagedObject
IContext 0.33 1 type 3 methods System.EnterpriseServices.IContext
IManagedObjectInfo 0 1 type 4 methods System.EnterpriseServices .IManagedObjectInfo
ITransactionProperty 0.077 1 type 13 methods System.EnterpriseServices .ITransactionProperty
ISecurityCallersColl 0.5 2 types 3 methods System.EnterpriseServices .ISecurityCallersColl
ISecurityIdentityColl 0.11 3 types 3 methods System.EnterpriseServices .ISecurityIdentityColl
ISecurityCallContext 0.33 2 types 6 methods System.EnterpriseServices .ISecurityCallContext
IConfigurationAttribute 0.83 2 types 3 methods System.EnterpriseServices .IConfigurationAttribute
ICreateTypeLib 0.1 1 type 10 methods System.EnterpriseServices.ICreateTypeLib
IConfigCallback 1 1 type 6 methods System.EnterpriseServices .IConfigCallback
ITransactionResourcePool 1 1 type 2 methods System.EnterpriseServices .ITransactionResourcePool
ICreateWithTipTransactionEx 1 1 type 1 method System.EnterpriseServices .ICreateWithTipTransactionEx
ICreateWithTransactionEx 1 1 type 1 method System.EnterpriseServices .ICreateWithTransactionEx
ICreateWithLocalTransaction 1 1 type 1 method System.EnterpriseServices .ICreateWithLocalTransaction
IAssemblyCache 0.4 1 type 5 methods System.EnterpriseServices.Internal .IAssemblyCache
ITypeLib2 0.071 1 type 14 methods System.EnterpriseServices.Internal .ITypeLib2
IFormatLogRecords 1 1 type 3 methods System.EnterpriseServices .CompensatingResourceManager .IFormatLogRecords
_IMonitorClerks 0.43 2 types 7 methods System.EnterpriseServices .CompensatingResourceManager ._IMonitorClerks
ICatalog 0.12 1 type 26 methods System.EnterpriseServices.Admin.ICatalog
ICatalogObject 0.21 29 types 7 methods System.EnterpriseServices.Admin .ICatalogObject
ICatalogCollection 0.26 7 types 16 methods System.EnterpriseServices.Admin .ICatalogCollection
IThunkInstallation 1 1 type 1 method System.EnterpriseServices.Thunk .IThunkInstallation
IProxyInvoke 0.5 1 type 2 methods System.EnterpriseServices.Thunk .IProxyInvoke
IDispatch 0.21 6 types 4 methods System.Dynamic.IDispatch
IProvideClassInfo 1 1 type 1 method System.Dynamic.IProvideClassInfo
ISystemColorTracker 1 1 type 1 method System.Drawing.Internal .ISystemColorTracker
UnsafeNativeMethods+IMarshal 0 1 type 6 methods Microsoft.Win32 .UnsafeNativeMethods+IMarshal
IInternetSecurityManager 0.12 2 types 8 methods Microsoft.Win32.IInternetSecurityManager
IAuthenticationManager 1 1 type 14 methods System.Net.IAuthenticationManager
IWebProxyFinder 1 1 type 4 methods System.Net.IWebProxyFinder
IRequestLifetimeTracker 1 1 type 1 method System.Net.IRequestLifetimeTracker
ISessionAuthenticationModule 0.67 1 type 3 methods System.Net.ISessionAuthenticationModule
ICloseEx 1 6 types 1 method System.Net.ICloseEx
SSPIInterface 0.2 5 types 21 methods System.Net.SSPIInterface
IAutoWebProxy 1 1 type 1 method System.Net.IAutoWebProxy
IEncodableStream 0.42 3 types 4 methods System.Net.Mime.IEncodableStream
IMSAdminBase 0.13 1 type 31 methods System.Net.Mail.IMSAdminBase
ISmtpAuthenticationModule 0.4 5 types 3 methods System.Net.Mail .ISmtpAuthenticationModule
INotifyCollectionChangedEventArgs 1 1 type 5 methods System.Runtime.InteropServices .WindowsRuntime .INotifyCollectionChangedEventArgs
IPropertyChangedEventArgs 1 1 type 1 method System.Runtime.InteropServices .WindowsRuntime .IPropertyChangedEventArgs
INotifyCollectionChanged_WinRT 1 1 type 2 methods System.Runtime.InteropServices .WindowsRuntime .INotifyCollectionChanged_WinRT
INotifyPropertyChanged_WinRT 1 1 type 2 methods System.Runtime.InteropServices .WindowsRuntime .INotifyPropertyChanged_WinRT
ICommand_WinRT 1 1 type 4 methods System.Runtime.InteropServices .WindowsRuntime.ICommand_WinRT
IDeflater 1 1 type 4 methods System.IO.Compression.IDeflater
IInflater 0.6 1 type 5 methods System.IO.Compression.IInflater
IFileFormatWriter 0.5 2 types 3 methods System.IO.Compression.IFileFormatWriter
IFileFormatReader 0.33 3 types 4 methods System.IO.Compression.IFileFormatReader
NativeComInterfaces+IAdsPathname 0.21 7 types 11 methods System.DirectoryServices.ActiveDirectory .NativeComInterfaces+IAdsPathname
NativeComInterfaces+IAdsProperty 0.042 2 types 24 methods System.DirectoryServices.ActiveDirectory .NativeComInterfaces+IAdsProperty
NativeComInterfaces+IAdsClass 0.058 2 types 43 methods System.DirectoryServices.ActiveDirectory .NativeComInterfaces+IAdsClass
ILocationReport 0.67 1 type 3 methods System.Device.Location.Internal .ILocationReport
ILatLongReport 0.62 1 type 8 methods System.Device.Location.Internal .ILatLongReport
ILocation 0.67 1 type 9 methods System.Device.Location.Internal .ILocation
IWizardStepEditableRegion 1 2 types 1 method System.Web.UI.Design.WebControls .IWizardStepEditableRegion
IDesignConnection 0.046 14 types 14 methods System.Data.Design.IDesignConnection
IDataSourceNamedObject 0 5 types 1 method System.Data.Design .IDataSourceNamedObject
IDataSourceXmlSerializable 1 1 type 2 methods System.Data.Design .IDataSourceXmlSerializable
IDataSourceXmlSpecialOwner 1 1 type 2 methods System.Data.Design .IDataSourceXmlSpecialOwner
IDataSourceInitAfterLoading 1 1 type 1 method System.Data.Design .IDataSourceInitAfterLoading
INamedObject 0.5 4 types 2 methods System.Data.Design.INamedObject
INamedObjectCollection 0 3 types 1 method System.Data.Design .INamedObjectCollection
INameService 0.083 8 types 6 methods System.Data.Design.INameService
IEventHandlerService 0.18 11 types 6 methods System.Windows.Forms.Design .IEventHandlerService
IMenuStatusHandler 1 1 type 2 methods System.Windows.Forms.Design .IMenuStatusHandler
IMouseHandler 0.5 2 types 6 methods System.Windows.Forms.Design .IMouseHandler
IOleDragClient 0.33 4 types 6 methods System.Windows.Forms.Design .IOleDragClient
IOverlayService 0.32 5 types 5 methods System.Windows.Forms.Design .IOverlayService
ISelectionUIHandler 0.5 2 types 13 methods System.Windows.Forms.Design .ISelectionUIHandler
ISelectionUIService 0.11 5 types 20 methods System.Windows.Forms.Design .ISelectionUIService
ISplitWindowService 0.5 2 types 2 methods System.Windows.Forms.Design .ISplitWindowService
ISupportInSituService 0.33 3 types 3 methods System.Windows.Forms.Design .ISupportInSituService
IClrStrongNameUsingIntPtr 0.24 1 type 25 methods Microsoft.Runtime.Hosting .IClrStrongNameUsingIntPtr
IClrStrongName 0.36 1 type 25 methods Microsoft.Runtime.Hosting.IClrStrongName
IEnumSTORE_ASSEMBLY_INSTALLATION_REFEREN CE 0 1 type 4 methods System.Deployment.Internal.Isolation .IEnumSTORE_ASSEMBLY_INSTALLATION_REFERE NCE
IEnumSTORE_DEPLOYMENT_METADATA 0.17 3 types 4 methods System.Deployment.Internal.Isolation .IEnumSTORE_DEPLOYMENT_METADATA
IEnumSTORE_DEPLOYMENT_METADATA_PROPERTY 0.17 3 types 4 methods System.Deployment.Internal.Isolation .IEnumSTORE_DEPLOYMENT_METADATA_PROPERTY
IEnumSTORE_ASSEMBLY 0.17 3 types 4 methods System.Deployment.Internal.Isolation .IEnumSTORE_ASSEMBLY
IEnumSTORE_ASSEMBLY_FILE 0.17 3 types 4 methods System.Deployment.Internal.Isolation .IEnumSTORE_ASSEMBLY_FILE
IEnumSTORE_CATEGORY 0.17 3 types 4 methods System.Deployment.Internal.Isolation .IEnumSTORE_CATEGORY
IEnumSTORE_CATEGORY_SUBCATEGORY 0.25 2 types 4 methods System.Deployment.Internal.Isolation .IEnumSTORE_CATEGORY_SUBCATEGORY
IEnumSTORE_CATEGORY_INSTANCE 0.17 3 types 4 methods System.Deployment.Internal.Isolation .IEnumSTORE_CATEGORY_INSTANCE
IReferenceIdentity 0.12 13 types 4 methods System.Deployment.Internal.Isolation .IReferenceIdentity
IDefinitionIdentity 0.083 18 types 4 methods System.Deployment.Internal.Isolation .IDefinitionIdentity
IEnumIDENTITY_ATTRIBUTE 0.2 2 types 5 methods System.Deployment.Internal.Isolation .IEnumIDENTITY_ATTRIBUTE
IEnumDefinitionIdentity 0.25 4 types 4 methods System.Deployment.Internal.Isolation .IEnumDefinitionIdentity
IEnumReferenceIdentity 0.25 2 types 4 methods System.Deployment.Internal.Isolation .IEnumReferenceIdentity
IDefinitionAppId 0.083 20 types 6 methods System.Deployment.Internal.Isolation .IDefinitionAppId
IReferenceAppId 0.2 5 types 5 methods System.Deployment.Internal.Isolation .IReferenceAppId
IIdentityAuthority 0.22 3 types 18 methods System.Deployment.Internal.Isolation .IIdentityAuthority
IAppIdAuthority 0.16 2 types 16 methods System.Deployment.Internal.Isolation .IAppIdAuthority
IStore 0.19 5 types 20 methods System.Deployment.Internal.Isolation .IStore
IManifestParseErrorCallback 0 2 types 1 method System.Deployment.Internal.Isolation .IManifestParseErrorCallback
IManifestInformation 0.5 2 types 1 method System.Deployment.Internal.Isolation .IManifestInformation
IActContext 0.22 3 types 18 methods System.Deployment.Internal.Isolation .IActContext
IStateManager 0.25 1 type 4 methods System.Deployment.Internal.Isolation .IStateManager
ISection 0.21 7 types 4 methods System.Deployment.Internal.Isolation .ISection
ISectionWithStringKey 0.5 1 type 2 methods System.Deployment.Internal.Isolation .ISectionWithStringKey
ISectionWithReferenceIdentityKey 1 1 type 1 method System.Deployment.Internal.Isolation .ISectionWithReferenceIdentityKey
ISectionEntry 0 1 type 2 methods System.Deployment.Internal.Isolation .ISectionEntry
IEnumUnknown 0.25 3 types 4 methods System.Deployment.Internal.Isolation .IEnumUnknown
ICMS 0.064 5 types 22 methods System.Deployment.Internal.Isolation .Manifest.ICMS
IHashElementEntry 0.14 2 types 7 methods System.Deployment.Internal.Isolation .Manifest.IHashElementEntry
IFileEntry 0.067 1 type 15 methods System.Deployment.Internal.Isolation .Manifest.IFileEntry
IFileAssociationEntry 0.17 1 type 6 methods System.Deployment.Internal.Isolation .Manifest.IFileAssociationEntry
IAssemblyReferenceEntry 0.25 1 type 4 methods System.Deployment.Internal.Isolation .Manifest.IAssemblyReferenceEntry
IEntryPointEntry 0.17 1 type 6 methods System.Deployment.Internal.Isolation .Manifest.IEntryPointEntry
IDescriptionMetadataEntry 0.14 1 type 7 methods System.Deployment.Internal.Isolation .Manifest.IDescriptionMetadataEntry
IDeploymentMetadataEntry 0.17 1 type 6 methods System.Deployment.Internal.Isolation .Manifest.IDeploymentMetadataEntry
IDependentOSMetadataEntry 0.12 1 type 8 methods System.Deployment.Internal.Isolation .Manifest.IDependentOSMetadataEntry
ICompatibleFrameworksMetadataEntry 0.5 1 type 2 methods System.Deployment.Internal.Isolation .Manifest .ICompatibleFrameworksMetadataEntry
IMetadataSectionEntry 0.33 1 type 21 methods System.Deployment.Internal.Isolation .Manifest.IMetadataSectionEntry
ICompatibleFrameworkEntry 0.2 1 type 5 methods System.Deployment.Internal.Isolation .Manifest.ICompatibleFrameworkEntry
IManagedDeploymentServiceCom 0 2 types 7 methods System.Deployment.Application .IManagedDeploymentServiceCom
IDownloadNotification 0 2 types 2 methods System.Deployment.Application .IDownloadNotification
IMetaDataDispenser 0.33 1 type 3 methods System.Deployment.Application .IMetaDataDispenser
IMetaDataImport 0 1 type 62 methods System.Deployment.Application .IMetaDataImport
IMetaDataAssemblyImport 0.5 1 type 14 methods System.Deployment.Application .IMetaDataAssemblyImport
NativeMethods+IAssemblyCache 0.05 4 types 5 methods System.Deployment.Application .NativeMethods+IAssemblyCache
NativeMethods+IAssemblyEnum 0.17 2 types 3 methods System.Deployment.Application .NativeMethods+IAssemblyEnum
NativeMethods+IApplicationContext 0 2 types 5 methods System.Deployment.Application .NativeMethods+IApplicationContext
NativeMethods+IAssemblyName 0 2 types 9 methods System.Deployment.Application .NativeMethods+IAssemblyName
NativeMethods+ICorRuntimeHost 0.026 2 types 19 methods System.Deployment.Application .NativeMethods+ICorRuntimeHost
ISourceLineInfo 0.22 18 types 4 methods System.Xml.Xsl.ISourceLineInfo
IErrorHelper 0.38 4 types 2 methods System.Xml.Xsl.IErrorHelper
IXPathBuilder<Node> 0.6 3 types 10 methods System.Xml.Xsl.XPath.IXPathBuilder<Node>
IFocus 0.5 2 types 3 methods System.Xml.Xsl.XPath.IFocus
IXPathEnvironment 0.38 2 types 4 methods System.Xml.Xsl.XPath.IXPathEnvironment
IQilAnnotation 1 1 type 1 method System.Xml.Xsl.Qil.IQilAnnotation
RecordOutput 0.2 5 types 2 methods System.Xml.Xsl.XsltOld.RecordOutput
IStackFrame 0 1 type 5 methods System.Xml.Xsl.XsltOld.Debugger .IStackFrame
IXsltProcessor 0 1 type 2 methods System.Xml.Xsl.XsltOld.Debugger .IXsltProcessor
IXsltDebugger 0.12 8 types 3 methods System.Xml.Xsl.XsltOld.Debugger .IXsltDebugger
IDataService 0.12 28 types 15 methods System.Data.Services.IDataService
IProjectedResult 0.5 2 types 2 methods System.Data.Services.IProjectedResult
OperationSignatures+ILogicalSignatures 0 2 types 3 methods System.Data.Services.Parsing .OperationSignatures+ILogicalSignatures
OperationSignatures+IArithmeticSignature s 0 2 types 11 methods System.Data.Services.Parsing .OperationSignatures+IArithmeticSignatur es
OperationSignatures+IRelationalSignature s 0 2 types 9 methods System.Data.Services.Parsing .OperationSignatures+IRelationalSignatur es
OperationSignatures+INegationSignatures 0 2 types 11 methods System.Data.Services.Parsing .OperationSignatures+INegationSignatures
OperationSignatures+INotSignatures 0 2 types 3 methods System.Data.Services.Parsing .OperationSignatures+INotSignatures
OperationSignatures+IEnumerableSignature s 0 1 type 28 methods System.Data.Services.Parsing .OperationSignatures+IEnumerableSignatur es
IExceptionWriter 0.5 2 types 1 method System.Data.Services.Serializers .IExceptionWriter
IProjectionProvider 0.5 2 types 1 method System.Data.Services.Providers .IProjectionProvider
IDataServices 0.21 8 types 7 methods System.Data.Linq.Provider.IDataServices
IDeferredSourceFactory 0.25 2 types 2 methods System.Data.Linq.Provider .IDeferredSourceFactory
IProvider 0.14 10 types 18 methods System.Data.Linq.Provider.IProvider
ICompiledQuery 0.67 3 types 1 method System.Data.Linq.Provider.ICompiledQuery
IConnectionManager 0.25 2 types 2 methods System.Data.Linq.SqlClient .IConnectionManager
IConnectionUser 1 1 type 1 method System.Data.Linq.SqlClient .IConnectionUser
IObjectReader 0.33 3 types 1 method System.Data.Linq.SqlClient.IObjectReader
IObjectReaderSession 0.17 6 types 2 methods System.Data.Linq.SqlClient .IObjectReaderSession
IReaderProvider 0.17 3 types 2 methods System.Data.Linq.SqlClient .IReaderProvider
IObjectReaderFactory 0.14 7 types 2 methods System.Data.Linq.SqlClient .IObjectReaderFactory
IObjectReaderCompiler 1 1 type 2 methods System.Data.Linq.SqlClient .IObjectReaderCompiler
ICompiledSubQuery 0 6 types 1 method System.Data.Linq.SqlClient .ICompiledSubQuery
IEntityStateManager 0.3 4 types 5 methods System.Data.IEntityStateManager
IEntityStateEntry 0.11 25 types 14 methods System.Data.IEntityStateEntry
IEntityAdapter 0.33 3 types 7 methods System.Data.IEntityAdapter
ISqlFragment 0.33 3 types 1 method System.Data.SqlClient.SqlGen .ISqlFragment
IDbSpatialValue 0.5 4 types 8 methods System.Data.SqlClient.Internal .IDbSpatialValue
IObjectView 1 1 type 2 methods System.Data.Objects.IObjectView
IObjectViewData<T> 0.33 3 types 13 methods System.Data.Objects.IObjectViewData<T>
IChangeTrackingStrategy 0 4 types 4 methods System.Data.Objects.Internal .IChangeTrackingStrategy
IEntityKeyStrategy 0 4 types 3 methods System.Data.Objects.Internal .IEntityKeyStrategy
IPropertyAccessorStrategy 0 4 types 5 methods System.Data.Objects.Internal .IPropertyAccessorStrategy
IEntityWrapper 0.13 21 types 29 methods System.Data.Objects.Internal .IEntityWrapper
IRelationshipFixer 0.33 3 types 1 method System.Data.Objects.DataClasses .IRelationshipFixer
IBaseList<T> 0.18 19 types 3 methods System.Data.Metadata.Edm.IBaseList<T>
ITileQuery 1 1 type 1 method System.Data.Mapping.ViewGeneration .QueryRewriting.ITileQuery
IRelationship 0.24 9 types 7 methods System.Data.EntityModel .SchemaObjectModel.IRelationship
IRelationshipEnd 0.3 10 types 5 methods System.Data.EntityModel .SchemaObjectModel.IRelationshipEnd
ISchemaElementLookUpTable<T> 0.25 4 types 5 methods System.Data.EntityModel .SchemaObjectModel .ISchemaElementLookUpTable<T>
IGroupExpressionExtendedInfo 1 1 type 2 methods System.Data.Common.EntitySql .IGroupExpressionExtendedInfo
IGetAlternativeName 1 1 type 1 method System.Data.Common.EntitySql .IGetAlternativeName
ITypedGetters 0 3 types 35 methods Microsoft.SqlServer.Server.ITypedGetters
ITypedGettersV3 0.11 10 types 17 methods Microsoft.SqlServer.Server .ITypedGettersV3
ITypedSettersV3 0.2 5 types 17 methods Microsoft.SqlServer.Server .ITypedSettersV3
IXmlDataVirtualNode 0.75 1 type 4 methods System.Xml.IXmlDataVirtualNode
IFilter 0.11 9 types 1 method System.Data.IFilter
NativeMethods+ISourcesRowset 0.5 2 types 1 method System.Data.Common .NativeMethods+ISourcesRowset
NativeMethods+ITransactionJoin 0.17 3 types 2 methods System.Data.Common .NativeMethods+ITransactionJoin
UnsafeNativeMethods+ADORecordConstructio n 0.5 2 types 1 method System.Data.Common .UnsafeNativeMethods+ADORecordConstructi on
UnsafeNativeMethods+ADORecordsetConstruc tion 0.33 2 types 3 methods System.Data.Common .UnsafeNativeMethods+ADORecordsetConstru ction
UnsafeNativeMethods+Recordset15 0.027 2 types 55 methods System.Data.Common .UnsafeNativeMethods+Recordset15
UnsafeNativeMethods+_ADORecord 0.031 2 types 16 methods System.Data.Common .UnsafeNativeMethods+_ADORecord
UnsafeNativeMethods+IAccessor 0.1 5 types 4 methods System.Data.Common .UnsafeNativeMethods+IAccessor
UnsafeNativeMethods+IChapteredRowset 0.25 2 types 2 methods System.Data.Common .UnsafeNativeMethods+IChapteredRowset
UnsafeNativeMethods+IColumnsInfo 0.33 3 types 1 method System.Data.Common .UnsafeNativeMethods+IColumnsInfo
UnsafeNativeMethods+IColumnsRowset 0.33 3 types 2 methods System.Data.Common .UnsafeNativeMethods+IColumnsRowset
UnsafeNativeMethods+ICommandPrepare 0.5 2 types 1 method System.Data.Common .UnsafeNativeMethods+ICommandPrepare
UnsafeNativeMethods+ICommandProperties 0.33 3 types 2 methods System.Data.Common .UnsafeNativeMethods+ICommandProperties
UnsafeNativeMethods+ICommandText 0.15 4 types 5 methods System.Data.Common .UnsafeNativeMethods+ICommandText
UnsafeNativeMethods+ICommandWithParamete rs 0.17 2 types 3 methods System.Data.Common .UnsafeNativeMethods+ICommandWithParamet ers
UnsafeNativeMethods+IDBInfo 0.25 4 types 2 methods System.Data.Common .UnsafeNativeMethods+IDBInfo
UnsafeNativeMethods+IDBProperties 0.14 7 types 3 methods System.Data.Common .UnsafeNativeMethods+IDBProperties
UnsafeNativeMethods+IDBSchemaRowset 0.2 5 types 2 methods System.Data.Common .UnsafeNativeMethods+IDBSchemaRowset
UnsafeNativeMethods+IErrorInfo 0.21 8 types 3 methods System.Data.Common .UnsafeNativeMethods+IErrorInfo
UnsafeNativeMethods+IErrorRecords 0.17 3 types 6 methods System.Data.Common .UnsafeNativeMethods+IErrorRecords
UnsafeNativeMethods+IMultipleResults 0.33 3 types 1 method System.Data.Common .UnsafeNativeMethods+IMultipleResults
UnsafeNativeMethods+IOpenRowset 0.33 3 types 1 method System.Data.Common .UnsafeNativeMethods+IOpenRowset
UnsafeNativeMethods+IRow 0.5 2 types 1 method System.Data.Common .UnsafeNativeMethods+IRow
UnsafeNativeMethods+IRowset 0.2 3 types 5 methods System.Data.Common .UnsafeNativeMethods+IRowset
UnsafeNativeMethods+IRowsetInfo 0.33 3 types 2 methods System.Data.Common .UnsafeNativeMethods+IRowsetInfo
UnsafeNativeMethods+ISQLErrorInfo 0.5 2 types 1 method System.Data.Common .UnsafeNativeMethods+ISQLErrorInfo
UnsafeNativeMethods+ITransactionLocal 0.05 4 types 5 methods System.Data.Common .UnsafeNativeMethods+ITransactionLocal
ICngSymmetricAlgorithm 1 1 type 13 methods Internal.Cryptography .ICngSymmetricAlgorithm
IIListProvider<TElement> 0.33 1 type 3 methods System.Linq.IIListProvider<TElement>
IParallelPartitionable<T> 1 1 type 1 method System.Linq.Parallel .IParallelPartitionable<T>
IMergeHelper<TInputOutput> 1 1 type 3 methods System.Linq.Parallel.IMergeHelper <TInputOutput>
IPartitionedStreamRecipient<TElement> 0.94 34 types 1 method System.Linq.Parallel .IPartitionedStreamRecipient<TElement>
IAttributedImport 0.33 3 types 6 methods System.ComponentModel.Composition .IAttributedImport
IReflectionPartCreationInfo 0.33 3 types 8 methods System.ComponentModel.Composition .ReflectionModel .IReflectionPartCreationInfo
IPartCreatorImportDefinition 1 5 types 1 method System.ComponentModel.Composition .Primitives.IPartCreatorImportDefinition
FilteredCatalog+IComposablePartCatalogTr aversal 1 1 type 2 methods System.ComponentModel.Composition .Hosting .FilteredCatalog+IComposablePartCatalogT raversal
IActivityDelegateFactory 1 1 type 2 methods System.Activities.Presentation .IActivityDelegateFactory
IExpandChild 0 1 type 1 method System.Activities.Presentation .IExpandChild
IAutoSplitContainer 1 1 type 2 methods System.Activities.Presentation .FreeFormEditing.IAutoSplitContainer
INestedFreeFormPanelContainer 0.75 2 types 2 methods System.Activities.Presentation .FreeFormEditing .INestedFreeFormPanelContainer
IAutoConnectContainer 0.33 3 types 2 methods System.Activities.Presentation .FreeFormEditing.IAutoConnectContainer
IAnnotationVisualProvider 0.25 4 types 3 methods System.Activities.Presentation .Annotations.IAnnotationVisualProvider
IAnnotationIndicator 0.2 5 types 4 methods System.Activities.Presentation .Annotations.IAnnotationIndicator
IDockedAnnotation 0.25 4 types 5 methods System.Activities.Presentation .Annotations.IDockedAnnotation
IFloatingAnnotation 0.23 4 types 13 methods System.Activities.Presentation .Annotations.IFloatingAnnotation
IValidationErrorSourceLocator 0.33 3 types 2 methods System.Activities.Presentation .Validation .IValidationErrorSourceLocator
IItemsCollection 0.5 1 type 4 methods System.Activities.Presentation.Model .IItemsCollection
IModelTreeItem 0.14 27 types 12 methods System.Activities.Presentation.Model .IModelTreeItem
IPropertyViewManager 0.22 3 types 6 methods System.Activities.Presentation.Internal .PropertyEditing.Views .IPropertyViewManager
ISelectionPathInterpreter 1 1 type 2 methods System.Activities.Presentation.Internal .PropertyEditing.Selection .ISelectionPathInterpreter
ISelectionStop 0.27 6 types 5 methods System.Activities.Presentation.Internal .PropertyEditing.Selection .ISelectionStop
IStateContainer 1 1 type 2 methods System.Activities.Presentation.Internal .PropertyEditing.State.IStateContainer
IAutomationFocusChangedEventSource 1 2 types 1 method System.Activities.Presentation.Internal .PropertyEditing.Automation .IAutomationFocusChangedEventSource
IMessageLogger 0.22 3 types 3 methods System.Activities.Presentation.Internal .PropertyEditing.FromExpression .Framework.IMessageLogger
IIconProvider 1 1 type 1 method System.Activities.Presentation.Internal .PropertyEditing.FromExpression .Framework.ValueEditors.IIconProvider
IPropertyInspector 0.25 2 types 2 methods System.Activities.Presentation.Internal .PropertyEditing.FromExpression .Framework.PropertyInspector .IPropertyInspector
IVersionEditor 1 1 type 1 method System.Activities.Presentation.View .IVersionEditor
ITreeViewItemSelectionHandler 0.5 3 types 2 methods System.Activities.Presentation.View .TreeView.ITreeViewItemSelectionHandler
IWorkflowDesignerXamlHelperExecutionCont ext 1 1 type 10 methods Microsoft.Activities.Presentation.Xaml .IWorkflowDesignerXamlHelperExecutionCon text
ILoadRetryStrategy 0.5 2 types 1 method System.Activities.DurableInstancing .ILoadRetryStrategy
IObjectSerializer 0.35 5 types 4 methods System.Activities.DurableInstancing .IObjectSerializer
IAsyncCodeActivity 1 1 type 1 method System.Activities.IAsyncCodeActivity
IDynamicActivity 0.33 2 types 3 methods System.Activities.IDynamicActivity
ILocationReferenceExpression 1 1 type 1 method System.Activities.Expressions .ILocationReferenceExpression
ILocationReferenceWrapper 1 3 types 1 method System.Activities.Expressions .ILocationReferenceWrapper
DynamicUpdateMapBuilder+IDefinitionMatch er 0.25 4 types 4 methods System.Activities.DynamicUpdate .DynamicUpdateMapBuilder+IDefinitionMatc her
IInstanceUpdatable 1 1 type 1 method System.Activities.DynamicUpdate .IInstanceUpdatable
IFlowSwitch 1 1 type 2 methods System.Activities.Statements.IFlowSwitch
ICaseKeyBoxView 0.88 1 type 8 methods System.Activities.Core.Presentation .ICaseKeyBoxView
IFlowSwitchLink 0.33 2 types 9 methods System.Activities.Core.Presentation .IFlowSwitchLink
IFlowSwitchDefaultLink 1 1 type 2 methods System.Activities.Core.Presentation .IFlowSwitchDefaultLink
IActivationService 0.5 2 types 5 methods System.ServiceModel.Activation .IActivationService
IActivatedMessageQueue 0.33 3 types 9 methods System.ServiceModel.Activation .IActivatedMessageQueue
ICreateITypeLib 0.1 1 type 10 methods Microsoft.Tools.RegAsm.ICreateITypeLib
IAssemblyEnum 0.17 2 types 3 methods Microsoft.Win32.IAssemblyEnum
IApplicationContext 0 2 types 5 methods Microsoft.Win32.IApplicationContext
IAssemblyName 0.056 2 types 9 methods Microsoft.Win32.IAssemblyName
IClrStrongNameUsingIntPtr 0.24 1 type 25 methods Microsoft.Runtime.Hosting .IClrStrongNameUsingIntPtr
IClrStrongName 0.36 1 type 25 methods Microsoft.Runtime.Hosting.IClrStrongName
IAsyncCausalityTracerStatics 0.86 1 type 7 methods Windows.Foundation.Diagnostics .IAsyncCausalityTracerStatics
IWellKnownStringEqualityComparer 1 1 type 2 methods System.IWellKnownStringEqualityComparer
IRuntimeMethodInfo 0.24 21 types 1 method System.IRuntimeMethodInfo
IRuntimeFieldInfo 0.67 6 types 1 method System.IRuntimeFieldInfo
IResourceGroveler 1 1 type 2 methods System.Resources.IResourceGroveler
ISecurityElementFactory 0.5 2 types 4 methods System.Security.ISecurityElementFactory
IBuiltInPermission 1 1 type 1 method System.Security.Permissions .IBuiltInPermission
IUnionSemanticCodeGroup 0 1 type 1 method System.Security.Policy .IUnionSemanticCodeGroup
ILegacyEvidenceAdapter 1 1 type 2 methods System.Security.Policy .ILegacyEvidenceAdapter
IDelayEvaluatedEvidence 0.33 8 types 3 methods System.Security.Policy .IDelayEvaluatedEvidence
IReportMatchMembershipCondition 1 2 types 1 method System.Security.Policy .IReportMatchMembershipCondition
IRuntimeEvidenceFactory 0.5 2 types 3 methods System.Security.Policy .IRuntimeEvidenceFactory
Tokenizer+ITokenReader 1 1 type 1 method System.Security.Util .Tokenizer+ITokenReader
IAsyncLocal 0.11 9 types 1 method System.Threading.IAsyncLocal
IAsyncLocalValueMap 0.5 3 types 2 methods System.Threading.IAsyncLocalValueMap
IDeferredDisposable 1 1 type 1 method System.Threading.IDeferredDisposable
IThreadPoolWorkItem 0.12 8 types 2 methods System.Threading.IThreadPoolWorkItem
ITaskCompletionAction 0.67 3 types 1 method System.Threading.Tasks .ITaskCompletionAction
IProducerConsumerQueue<T> 0.25 4 types 5 methods System.Threading.Tasks .IProducerConsumerQueue<T>
ISection 0.083 6 types 4 methods System.Deployment.Internal.Isolation .ISection
ISectionWithStringKey 0.5 1 type 2 methods System.Deployment.Internal.Isolation .ISectionWithStringKey
ISectionWithReferenceIdentityKey 1 1 type 1 method System.Deployment.Internal.Isolation .ISectionWithReferenceIdentityKey
ISectionEntry 0 2 types 2 methods System.Deployment.Internal.Isolation .ISectionEntry
IEnumUnknown 0.25 1 type 4 methods System.Deployment.Internal.Isolation .IEnumUnknown
IEnumSTORE_ASSEMBLY_INSTALLATION_REFEREN CE 0 1 type 4 methods System.Deployment.Internal.Isolation .IEnumSTORE_ASSEMBLY_INSTALLATION_REFERE NCE
IEnumSTORE_DEPLOYMENT_METADATA 0.17 3 types 4 methods System.Deployment.Internal.Isolation .IEnumSTORE_DEPLOYMENT_METADATA
IEnumSTORE_DEPLOYMENT_METADATA_PROPERTY 0.17 3 types 4 methods System.Deployment.Internal.Isolation .IEnumSTORE_DEPLOYMENT_METADATA_PROPERTY
IEnumSTORE_ASSEMBLY 0.17 3 types 4 methods System.Deployment.Internal.Isolation .IEnumSTORE_ASSEMBLY
IEnumSTORE_ASSEMBLY_FILE 0.17 3 types 4 methods System.Deployment.Internal.Isolation .IEnumSTORE_ASSEMBLY_FILE
IEnumSTORE_CATEGORY 0.17 3 types 4 methods System.Deployment.Internal.Isolation .IEnumSTORE_CATEGORY
IEnumSTORE_CATEGORY_SUBCATEGORY 0.25 2 types 4 methods System.Deployment.Internal.Isolation .IEnumSTORE_CATEGORY_SUBCATEGORY
IEnumSTORE_CATEGORY_INSTANCE 0.17 3 types 4 methods System.Deployment.Internal.Isolation .IEnumSTORE_CATEGORY_INSTANCE
IReferenceIdentity 0 5 types 4 methods System.Deployment.Internal.Isolation .IReferenceIdentity
IDefinitionIdentity 0.021 12 types 4 methods System.Deployment.Internal.Isolation .IDefinitionIdentity
IEnumDefinitionIdentity 0.25 2 types 4 methods System.Deployment.Internal.Isolation .IEnumDefinitionIdentity
IDefinitionAppId 0.046 18 types 6 methods System.Deployment.Internal.Isolation .IDefinitionAppId
IReferenceAppId 0 2 types 5 methods System.Deployment.Internal.Isolation .IReferenceAppId
IIdentityAuthority 0.028 2 types 18 methods System.Deployment.Internal.Isolation .IIdentityAuthority
IAppIdAuthority 0.062 4 types 16 methods System.Deployment.Internal.Isolation .IAppIdAuthority
IStore 0.19 5 types 20 methods System.Deployment.Internal.Isolation .IStore
IManifestParseErrorCallback 0 2 types 1 method System.Deployment.Internal.Isolation .IManifestParseErrorCallback
IManifestInformation 0.5 2 types 1 method System.Deployment.Internal.Isolation .IManifestInformation
IActContext 0.14 2 types 18 methods System.Deployment.Internal.Isolation .IActContext
ICMS 0.053 6 types 22 methods System.Deployment.Internal.Isolation .Manifest.ICMS
IAssemblyReferenceDependentAssemblyEntry 0.091 1 type 11 methods System.Deployment.Internal.Isolation .Manifest .IAssemblyReferenceDependentAssemblyEntr y
IAssemblyReferenceEntry 0.25 1 type 4 methods System.Deployment.Internal.Isolation .Manifest.IAssemblyReferenceEntry
IEntryPointEntry 0.17 1 type 6 methods System.Deployment.Internal.Isolation .Manifest.IEntryPointEntry
IPermissionSetEntry 0.33 1 type 3 methods System.Deployment.Internal.Isolation .Manifest.IPermissionSetEntry
IDescriptionMetadataEntry 0.14 1 type 7 methods System.Deployment.Internal.Isolation .Manifest.IDescriptionMetadataEntry
IMetadataSectionEntry 0.048 2 types 21 methods System.Deployment.Internal.Isolation .Manifest.IMetadataSectionEntry
IInternalMessage 0.27 8 types 7 methods System.Runtime.Remoting.Messaging .IInternalMessage
ISerializationRootObject 1 1 type 1 method System.Runtime.Remoting.Messaging .ISerializationRootObject
NativeMethods+IDispatch 0 2 types 4 methods System.Runtime.InteropServices .NativeMethods+IDispatch
IRestrictedErrorInfo 0 2 types 2 methods System.Runtime.InteropServices .WindowsRuntime.IRestrictedErrorInfo
IClosable 1 1 type 1 method System.Runtime.InteropServices .WindowsRuntime.IClosable
IStringable 1 2 types 1 method System.Runtime.InteropServices .WindowsRuntime.IStringable
IReference<T> 0 1 type 1 method System.Runtime.InteropServices .WindowsRuntime.IReference<T>
IGetProxyTarget 1 1 type 1 method System.Runtime.InteropServices .WindowsRuntime.IGetProxyTarget
ICustomProperty 0 4 types 8 methods System.Runtime.InteropServices .WindowsRuntime.ICustomProperty
IIterable<T> 0.6 5 types 1 method System.Runtime.InteropServices .WindowsRuntime.IIterable<T>
IBindableIterable 1 1 type 1 method System.Runtime.InteropServices .WindowsRuntime.IBindableIterable
IIterator<T> 0.17 9 types 4 methods System.Runtime.InteropServices .WindowsRuntime.IIterator<T>
IBindableIterator 0.17 6 types 3 methods System.Runtime.InteropServices .WindowsRuntime.IBindableIterator
IVector<T> 0.27 4 types 12 methods System.Runtime.InteropServices .WindowsRuntime.IVector<T>
IVector_Raw<T> 0.83 1 type 12 methods System.Runtime.InteropServices .WindowsRuntime.IVector_Raw<T>
IVectorView<T> 0.38 6 types 4 methods System.Runtime.InteropServices .WindowsRuntime.IVectorView<T>
IBindableVector 0.33 3 types 10 methods System.Runtime.InteropServices .WindowsRuntime.IBindableVector
IBindableVectorView 0 1 type 3 methods System.Runtime.InteropServices .WindowsRuntime.IBindableVectorView
IMap<K,V> 0.29 3 types 7 methods System.Runtime.InteropServices .WindowsRuntime.IMap<K,V>
IMapView<K,V> 0.19 4 types 4 methods System.Runtime.InteropServices .WindowsRuntime.IMapView<K,V>
IKeyValuePair<K,V> 0.67 3 types 2 methods System.Runtime.InteropServices .WindowsRuntime.IKeyValuePair<K,V>
OpportunisticIntern+IInternable 0.6 3 types 5 methods Microsoft.Build .OpportunisticIntern+IInternable
INodeEndpoint 0 3 types 7 methods Microsoft.Build.BackEnd.INodeEndpoint
INodePacket 0.4 5 types 1 method Microsoft.Build.BackEnd.INodePacket
INodePacketHandler 0.5 2 types 1 method Microsoft.Build.BackEnd .INodePacketHandler
INodePacketTranslatable 1 2 types 1 method Microsoft.Build.BackEnd .INodePacketTranslatable
INodePacketTranslator 0.063 14 types 27 methods Microsoft.Build.BackEnd .INodePacketTranslator
IRecordEnum 1 1 type 1 method Microsoft.VisualBasic.CompilerServices .IRecordEnum
IRowsetInternal 0.3 2 types 5 methods Microsoft.VisualBasic.Compatibility.VB6 .IRowsetInternal
IRowsetChangeInternal 0.33 1 type 3 methods Microsoft.VisualBasic.Compatibility.VB6 .IRowsetChangeInternal
IDataFormatInternal 0.36 1 type 14 methods Microsoft.VisualBasic.Compatibility.VB6 .IDataFormatInternal
IScriptScope 0 2 types 1 method Microsoft.Compiler.VisualBasic .IScriptScope
ITypeScope 0 2 types 2 methods Microsoft.Compiler.VisualBasic .ITypeScope
IImportScope 0 2 types 1 method Microsoft.Compiler.VisualBasic .IImportScope
UCOMITransactionBridgeNetworkConfigXP 1 1 type 7 methods Microsoft.Transactions.Bridge.Dtc .UCOMITransactionBridgeNetworkConfigXP
UCOMITransactionBridgeNetworkConfig 1 1 type 8 methods Microsoft.Transactions.Bridge.Dtc .UCOMITransactionBridgeNetworkConfig
UCOMIGatewayProtocol 0.67 1 type 3 methods Microsoft.Transactions.Bridge.Dtc .UCOMIGatewayProtocol
IActivationCoordinator 0.2 5 types 1 method Microsoft.Transactions.Wsat.Messaging .IActivationCoordinator
ICompletionCoordinator 0.2 5 types 3 methods Microsoft.Transactions.Wsat.Messaging .ICompletionCoordinator
ICompletionParticipant 0.25 4 types 3 methods Microsoft.Transactions.Wsat.Messaging .ICompletionParticipant
IDatagramService 0 1 type 2 methods Microsoft.Transactions.Wsat.Messaging .IDatagramService
IRequestReplyService 0 4 types 3 methods Microsoft.Transactions.Wsat.Messaging .IRequestReplyService
IWSActivationCoordinator 0.5 2 types 1 method Microsoft.Transactions.Wsat.Messaging .IWSActivationCoordinator
IWSRegistrationCoordinator 0.5 2 types 1 method Microsoft.Transactions.Wsat.Messaging .IWSRegistrationCoordinator
IWSCompletionCoordinator 0.5 2 types 1 method Microsoft.Transactions.Wsat.Messaging .IWSCompletionCoordinator
IWSCompletionParticipant 0.5 2 types 1 method Microsoft.Transactions.Wsat.Messaging .IWSCompletionParticipant
IWSTwoPhaseCommitCoordinator 0.5 2 types 1 method Microsoft.Transactions.Wsat.Messaging .IWSTwoPhaseCommitCoordinator
IWSTwoPhaseCommitParticipant 0.5 2 types 1 method Microsoft.Transactions.Wsat.Messaging .IWSTwoPhaseCommitParticipant
ICoordinationListener 0.33 5 types 3 methods Microsoft.Transactions.Wsat.Messaging .ICoordinationListener
IRegistrationCoordinator 0.2 5 types 1 method Microsoft.Transactions.Wsat.Messaging .IRegistrationCoordinator
ITwoPhaseCommitCoordinator 0.2 5 types 6 methods Microsoft.Transactions.Wsat.Messaging .ITwoPhaseCommitCoordinator
ITwoPhaseCommitParticipant 0.2 5 types 4 methods Microsoft.Transactions.Wsat.Messaging .ITwoPhaseCommitParticipant
ITimerRecipient 1 1 type 3 methods Microsoft.Transactions.Wsat.Protocol .ITimerRecipient
IProtocolProvider 0.3 3 types 9 methods Microsoft.Transactions.Bridge .IProtocolProvider
IProtocolProviderCoordinatorService 0.14 20 types 6 methods Microsoft.Transactions.Bridge .IProtocolProviderCoordinatorService
IProtocolProviderPropagationService 0.079 7 types 9 methods Microsoft.Transactions.Bridge .IProtocolProviderPropagationService
IProducerConsumerQueue<T> 0.6 2 types 5 methods System.Threading.Tasks .IProducerConsumerQueue<T>
IDataflowBlock 0.087 23 types 3 methods System.Threading.Tasks.Dataflow .IDataflowBlock
IReceivableSourceBlock<TOutput> 0.5 1 type 2 methods System.Threading.Tasks.Dataflow .IReceivableSourceBlock<TOutput>
ISourceBlock<TOutput> 0.13 29 types 4 methods System.Threading.Tasks.Dataflow .ISourceBlock<TOutput>
ITargetBlock<TInput> 0.11 35 types 1 method System.Threading.Tasks.Dataflow .ITargetBlock<TInput>
IDebuggerDisplay 1 6 types 1 method System.Threading.Tasks.Dataflow.Internal .IDebuggerDisplay
IReorderingBuffer 0.25 4 types 1 method System.Threading.Tasks.Dataflow.Internal .IReorderingBuffer
ICSharpInvokeOrInvokeMemberBinder 0.57 2 types 7 methods Microsoft.CSharp.RuntimeBinder .ICSharpInvokeOrInvokeMemberBinder
ITypeOrNamespace 0.2 5 types 4 methods Microsoft.CSharp.RuntimeBinder.Semantics .ITypeOrNamespace
IErrorSink 0.25 2 types 2 methods Microsoft.CSharp.RuntimeBinder.Errors .IErrorSink
IKeyed 1 1 type 1 method Microsoft.Build.Collections.IKeyed
IInternetSecurityManager 0.12 1 type 8 methods IInternetSecurityManager
IClrStrongNameUsingIntPtr 0.24 1 type 25 methods Microsoft.Runtime.Hosting .IClrStrongNameUsingIntPtr
IClrStrongName 0.36 1 type 25 methods Microsoft.Runtime.Hosting.IClrStrongName
OpportunisticIntern+IInternable 0.6 3 types 5 methods Microsoft.Build .OpportunisticIntern+IInternable
IComReferenceResolver 0.17 2 types 3 methods Microsoft.Build.Tasks .IComReferenceResolver
UCOMICreateITypeLib 0.1 1 type 10 methods Microsoft.Build.Tasks .UCOMICreateITypeLib
IMetaDataDispenser 0.33 1 type 3 methods Microsoft.Build.Tasks.IMetaDataDispenser
IMetaDataImport 0 2 types 62 methods Microsoft.Build.Tasks.IMetaDataImport
IMetaDataImport2 0.014 2 types 69 methods Microsoft.Build.Tasks.IMetaDataImport2
IMetaDataAssemblyImport 0.25 2 types 14 methods Microsoft.Build.Tasks .IMetaDataAssemblyImport
IAssemblyCache 0.1 2 types 5 methods Microsoft.Build.Tasks.IAssemblyCache
IAssemblyName 0.056 2 types 9 methods Microsoft.Build.Tasks.IAssemblyName
IAssemblyEnum 0.17 2 types 3 methods Microsoft.Build.Tasks.IAssemblyEnum
IEngineCallback 0.18 12 types 6 methods Microsoft.Build.BuildEngine .IEngineCallback
INodeProvider 0.3 3 types 10 methods Microsoft.Build.BuildEngine .INodeProvider
ITaskRegistry 0.22 6 types 3 methods Microsoft.Build.BuildEngine .ITaskRegistry
OpportunisticIntern+IInternable 0.26 7 types 5 methods Microsoft.Build .OpportunisticIntern+IInternable
IToolsetProvider 0.17 6 types 2 methods Microsoft.Build.Evaluation .IToolsetProvider
ConditionEvaluator+IConditionEvaluationS tate 0.22 7 types 7 methods Microsoft.Build.Evaluation .ConditionEvaluator+IConditionEvaluation State
IEvaluatorData<P,I,M,D> 0.43 2 types 38 methods Microsoft.Build.Evaluation .IEvaluatorData<P,I,M,D>
IItem 0.3 10 types 5 methods Microsoft.Build.Evaluation.IItem
IItemDefinition<M> 0.33 3 types 2 methods Microsoft.Build.Evaluation .IItemDefinition<M>
IItemFactory<S,T> 0.14 8 types 8 methods Microsoft.Build.Evaluation.IItemFactory <S,T>
IItem<M> 0.5 2 types 2 methods Microsoft.Build.Evaluation.IItem<M>
IItemProvider<T> 0.14 7 types 1 method Microsoft.Build.Evaluation.IItemProvider <T>
IMetadataTable 0.037 9 types 3 methods Microsoft.Build.Evaluation .IMetadataTable
IProjectMetadataParent 1 1 type 2 methods Microsoft.Build.Evaluation .IProjectMetadataParent
IProperty 0.33 10 types 3 methods Microsoft.Build.Evaluation.IProperty
IPropertyProvider<T> 0.1 10 types 2 methods Microsoft.Build.Evaluation .IPropertyProvider<T>
IKeyed 0.7 10 types 1 method Microsoft.Build.Collections.IKeyed
IDeepCloneable<T> 1 1 type 1 method Microsoft.Build.Collections .IDeepCloneable<T>
IValued 1 3 types 1 method Microsoft.Build.Collections.IValued
IElementLocation 0.042 48 types 4 methods Microsoft.Build.Shared.IElementLocation
INodeEndpoint 0.2 5 types 7 methods Microsoft.Build.BackEnd.INodeEndpoint
INodePacket 0.56 18 types 1 method Microsoft.Build.BackEnd.INodePacket
INodePacketFactory 0.31 4 types 4 methods Microsoft.Build.BackEnd .INodePacketFactory
INodePacketHandler 0.17 6 types 1 method Microsoft.Build.BackEnd .INodePacketHandler
INodePacketTranslatable 1 3 types 1 method Microsoft.Build.BackEnd .INodePacketTranslatable
INodePacketTranslator 0.091 45 types 27 methods Microsoft.Build.BackEnd .INodePacketTranslator
IConfigCache 0.29 7 types 11 methods Microsoft.Build.BackEnd.IConfigCache
IResultsCache 0.39 4 types 7 methods Microsoft.Build.BackEnd.IResultsCache
ITargetBuilderCallback 0.33 3 types 1 method Microsoft.Build.BackEnd .ITargetBuilderCallback
IRequestBuilder 0.26 3 types 9 methods Microsoft.Build.BackEnd.IRequestBuilder
IRequestBuilderCallback 0.42 2 types 6 methods Microsoft.Build.BackEnd .IRequestBuilderCallback
ITargetBuilder 1 1 type 1 method Microsoft.Build.BackEnd.ITargetBuilder
ITaskBuilder 0.5 2 types 1 method Microsoft.Build.BackEnd.ITaskBuilder
IBuildResults 0.44 1 type 9 methods Microsoft.Build.BackEnd.IBuildResults
IBuildRequestEngine 0.67 2 types 18 methods Microsoft.Build.BackEnd .IBuildRequestEngine
INodeManager 0.62 2 types 4 methods Microsoft.Build.BackEnd.INodeManager
INodeProvider 0.6 2 types 5 methods Microsoft.Build.BackEnd.INodeProvider
IBuildComponent 0.28 9 types 2 methods Microsoft.Build.BackEnd.IBuildComponent
IBuildComponentHost 0.19 26 types 6 methods Microsoft.Build.BackEnd .IBuildComponentHost
IScheduler 0.89 1 type 9 methods Microsoft.Build.BackEnd.IScheduler
INode 1 1 type 1 method Microsoft.Build.BackEnd.INode
ITaskExecutionHost 0.89 1 type 9 methods Microsoft.Build.BackEnd .ITaskExecutionHost
ILoggingService 0.053 31 types 48 methods Microsoft.Build.BackEnd.Logging .ILoggingService
IBuildEventSink 0.3 3 types 9 methods Microsoft.Build.BackEnd.Logging .IBuildEventSink
IRegisteredTaskObjectCache 0.42 3 types 4 methods Microsoft.Build.BackEnd.Components .Caching.IRegisteredTaskObjectCache
ICatalog2 0.088 1 type 57 methods Microsoft.Tools.ServiceModel .ComSvcConfig.ICatalog2
ICatalogObject 0.48 3 types 7 methods Microsoft.Tools.ServiceModel .ComSvcConfig.ICatalogObject
ICatalogCollection 0.29 3 types 16 methods Microsoft.Tools.ServiceModel .ComSvcConfig.ICatalogCollection
IPSFactoryBuffer 0.5 1 type 2 methods Microsoft.Tools.ServiceModel .ComSvcConfig.IPSFactoryBuffer
ICreateTypeLib 0.25 2 types 10 methods Microsoft.Tools.ServiceModel .ComSvcConfig.ICreateTypeLib
ICreateTypeInfo 0.13 1 type 23 methods Microsoft.Tools.ServiceModel .ComSvcConfig.ICreateTypeInfo
ICreateTypeInfo2 0.053 1 type 38 methods Microsoft.Tools.ServiceModel .ComSvcConfig.ICreateTypeInfo2
IEnumUnknown 0.25 1 type 4 methods Microsoft.Tools.ServiceModel .ComSvcConfig.IEnumUnknown
IClrMetaHost 0.17 1 type 6 methods Microsoft.Tools.ServiceModel .ComSvcConfig.IClrMetaHost
IClrRuntimeInfo 0.071 2 types 7 methods Microsoft.Tools.ServiceModel .ComSvcConfig.IClrRuntimeInfo

 

Are SOLID principles Cargo Cult?

My last post about SOLID Design: The Single Responsibility Principle (SRP) generated some discussion on reddit. The discussion originated from a remark considering SOLID principles as Cargo Cult. Taking account the definition of Cargo Cult the metaphor is a bit provocative but it is not unfounded.

cargo cult is a belief system among members of a relatively undeveloped society in which adherents practice superstitious rituals hoping to bring modern goods supplied by a more technologically advanced society

The recent Boeing’s 737 Max fiasco revealed that some parts of their software have been outsourced to $9-an-hour engineers. Those engineers shouldn’t be blamed for not achieving top notch software taking account the budget. Nevertheless it is clear that a lot of software written nowadays look like this cargo cult plane. For many real-world developers, SOLID principles are superstitious rituals whose primary goal is to succeed during job interview.

The SRP article underlines that SRP is the only SOLID principle not related to the usage of abstraction and polymorphism. SRP is about logic partitioning into code: which logic should be declared in which class. But SRP is so vague it is practically useless from its two definitions.

Definition 1: A class should have a single responsibility and this responsibility should be entirely encapsulated by the class.

Definition 2: A class should have one reason to change.

One can justify any class design choice by tweaking somehow what is a responsibility or what is a reason to change. In other words, as someone wrote in comment: Most people who “practice” it don’t actually know what it means and use it as an excuse to do whatever the hell they were going to do anyways.

We can feel bitterness in those comments, certainly coming from seasoned developers whose job is to fix mistakes of $9 an hour engineers.

SOLID Principles vs. OOP Patterns

We must remember that SOLID principles emerged in the 80s and 90s from the work of world-class OOP experts like Robert C. Martin (Uncle Bob) and Bertrand Meyer. Software writing is often considered as an art. Terminologies such as clean code or beautiful code have been widely used. But art is a subjective activity. In this context, SOLID principles necessarily remain vague and subject to interpretation. And this is what makes the difference between a SOLID principle and an OOP pattern:

  • A SOLID Principle is subjective. It helps to guide the usage of powerful concepts of Object Oriented Programming (OOP).
  • An OOP Pattern is objective. It is a set of recipes to implement a well identified situation with the OOP concepts.

Despite a restraint number of keywords and operators, the OOP toolbelt of languages such as C# or Java is very rich. With a few dozens of characters it is possible to write code that puzzle experts. C# especially gets richer and richer with many syntactic sugars to express complex situations with just a few characters. This power is a double edged sword: seasoned developers can write neat and compact code. But on the other hand it is easy to misuse this power, especially for junior developers and all those that write code just to pay their bills.

Always keep in mind the KISS principle

Someone wrote in comments: “SOLID encourages abstraction, and abstraction increases complexity. It’s not always worth it, but it’s always presented as the non-plus ultra of good approaches.”

The only reason to be for abstraction in OOP is to simplify the implementation of a complex business rule.

  • Abstracting Circle, Rectangle and Triangle with an IShape interface will dramatically simplify the implementation of a shape drawing software.
  • On the other hand, creating an interface for each class is a waste of resource: not every concepts in your program deserve an abstraction.

This is why the Keep It Simple Stupid KISS principle should be always kept in mind: don’t add up extra implementation complexity on top of the business complexity.

SOLID and Static Analysis

I am in the .NET static analysis industry since 2004. At that time I was consulting for large companies with massive legacy apps that were very costly to maintain. Books like Robert Martin’s Agile Principles, Patterns, and Practices made me realize that the source code is data. This data can be measured with code metrics. And the same way relational data can be crawled with SQL queries, code as data can be crawled with code queries. For example:

This query will objectively match complex methods not fully covered by tests. There are situations where one can argue that static analysis returns false positives but there is no justification for complex methods not well tested.

Not all aspects of SOLID principles can be objectively measured and verified. However static analysis can help bring objectiveness. For example:

SOLID and Testability

Regularly applying such rules will avoid taking SOLID too far to the point it becomes detrimental. However there are still all those aspects of SOLID, and code design in general, that must be left to creativity and interpretation. Experience in software development helps a lot here: over the years one refines his/her gut feeling about which design will increase flexibility and maintainability.

By definition juniors developer have no experience. However anyone can relentlessly struggle for 100% code coverage by tests. Being able to fully cover your code means, by definition, that your code is testable. Testability doesn’t come by chance. The properties that leads to full testability are the same properties that leads to high maintainability. Those properties include:

  • Easiness to use API
  • Domain classes well isolated
  • Careful map of logic to classes
  • Short classes and short methods
  • Cohesive classes
  • Abstractions and polymorphism used judiciously
  • Careful management of states mutability

Advices to add up objectivity when applying SOLID principles

Not everyone is a senior developer with a passion for well designed code. As a consequence Cargo Cult usage of SOLID principles is common. To improve the design some objectivity needs to be added in the development process. Here are my 3 advices for that:

  • KISS principle first, always struggle for simplicity: if it is complicated it is not SOLID.
  • Use static analysis to automatically monitor some measurable aspects of SOLID. Gross violations of code quality rules and metrics are also SOLID principles violations.
  • Refactor your code until it becomes seamlessly 100% coverable by tests. Code that cannot be easily 100% covered by tests is not SOLID.

 

 

SOLID Design: The Single Responsibility Principle (SRP)

After having covered The Open-Close Principle (OCP) and The Liskov Substitution Principle (LSP) let’s talk about the Single Responsibility Principle (SRP) which is the S in the SOLID acronym. The SRP definition is:

A class should have a single responsibility and this responsibility should be entirely encapsulated by the class.

This leads to what is a responsibility in software design? There is no trivial answer, this is why Robert C. Martin (Uncle Bob) rewrote the SRP principle this way:

A class should have one reason to change.

This leads to what is a reason to change?

SRP is a principle that cannot be easily inferred from its definition. Moreover the SRP lets a lot of room for own opinions and interpretations. So what is SRP about? SRP is about logic partitioning into code: which logic should be declared in which class. Something to keep in mind is that SRP is the only SOLID principle not related to the usage of abstraction and polymorphism.

The goal of this post is to propose objective and concrete guidelines to increase your classes compliance with SRP, and in-fine, increase the maintainability of your code.

SRP and Concerns

Typically the ActiveRecord pattern is used to exhibit a typical SRP violation. An ActiveRecord class has two responsibilities:

  • First an ActiveRecord object stores in-memory data retrieved from a relational database.
  • Second the record is active in the sense that data in-memory and data in the relational database are kept mirrored. For that, the CRUD (Create Read Update Delete) operations are implemented by the ActiveRecord.

To make things concrete an ActiveRecord class can look like that:

If Employee was a POCO class that doesn’t know about persistence and if the persistence was handled in a dedicated persistence layer the API would be improved because:

  • Not all Employee consumer wants to deal with persistence.
  • More importantly an Employee consumer really needs to know when an expensive DB roundtrip is triggered: if the Employee class is responsible for the persistence who knows if the data is persisted as soon as a setter is invoked?

Hence better isolate the persistence layer accesses and make them more explicit. This is why at NDepend we promote rules like UI layer shouldn’t use directly DB types that can be easily adapted to enforce any sort of code isolation.

Persistence is what we call a cross-cutting concerns, an aspect of the implementation that tends to spawn all over the code. We can expect that most domain objects are concerned with persistence. Other cross-cutting-concerns we want to separate domain objects from include: validation, log, authentication, error handling, threading, caching. The need to separate domain entities from those cross-cutting concerns can be handled by some OOP pattern like the pattern decorator for example. Alternatively some Object-Relational Mapping (ORM) frameworks and some Aspect-Oriented-Programming (AOP) frameworks can be used.

SRP and Reason to Change

Let’s consider this version of Employee:

The ComputePay() behavior is under the responsibility of the finance people and the ReportHours() behavior is under the responsibility of the operational people. Hence if a financial person needs a change to be implemented in ComputePay() we can assume this change won’t affect the ReportHours() method. Thus according to the version of SRP that states “a class should have one reason to change”, it is wise to declare these methods in different dedicated modules. As a consequence a change in ComputePay() has no risk to affect the behavior of ReportHours() and vice-versa. In other words we want these two parts of the code to be independent because they will evolve independently.

This is why Robert C. Martin wrote that SRP is about people : make sure that logics controlled by different people are implemented in different modules.

SRP and High-Cohesion

The SRP is about encapsulating logic and data in a class because they fit well together. Fit well means that the class is cohesive in the sense that most methods use most fields. Actually cohesion of a class can be measured with the Lack of Cohesion Of Methods (LCOM) metric. See below an explanations of LCOM (extracted from this great Stuart Celarier placemat) What matters is to understand that if all methods of a class are using all instances fields, the class is considered utterly cohesive and has the best LCOM score, which is 0 or close to 0.

Typically the effect of a SRP violation is to partition a class methods and fields into groups with few connections. The fields needed to compute the pay of an employee are not the same than the fields needed to report pending work. This is why the LCOM metric can be used to measure adherence to SRP and take actions. You can use the rule Avoid types with poor cohesion to track classes with poor cohesion between methods and fields.

SRP and Fat Code Smells

While we can hardly find an easy definition for what is a responsibility we noticed that adhering to SRP usually results in classes with a good LCOM score. On the other hand, not adhering to SRP usually leads to the God class phenomenon: a class that knows too much and does too much. Such god class is usually too large: violations of rules like Avoid types too big, Avoid types with too many methods, Avoid types with too many fields are good candidate to spot god classes and refactor into a finer-grained design.

Guidelines to adhere to SRP

Here are a set of objective and concrete guidelines to adhere to SRP:

  • Domain classes must be isolated from Cross-Cutting Concerns: code responsible for persistence, validation, log, authentication, error handling, threading, caching…
  • When implementing your domain, favor POCO classes that do not have any dependency on an external framework. Note that a POCO class is not necessarily a fields and properties only class, but can implement logic/behavior related to its data.
  • Use your understanding of the Domain to partition code: logics related to different business functions should be kept separated to avoid interference.
  • Regularly check the Lack of Cohesion Of Methods (LCOM) score of your classes.
  • Regularly check for too large and too complex classes.