Share via


CA1059: Members should not expose certain concrete types

Applies to: yesVisual Studio noVisual Studio for Mac

Note

This article applies to Visual Studio 2017. If you're looking for the latest Visual Studio documentation, see Visual Studio documentation. We recommend upgrading to the latest version of Visual Studio. Download it here

Item Value
RuleId CA1059
Category Microsoft.Design
Breaking change Breaking

Cause

An externally visible member is a certain concrete type or exposes certain concrete types through one of its parameters or return value. Currently, this rule reports exposure of the following concrete types:

Note

This rule has been deprecated. For more information, see Deprecated rules.

Rule description

A concrete type is a type that has a complete implementation and therefore can be instantiated. To allow widespread use of the member, replace the concrete type with the suggested interface. This allows the member to accept any type that implements the interface or be used where a type that implements the interface is expected.

The following table lists the targeted concrete types and their suggested replacements.

Concrete type Replacement
XPathDocument System.Xml.XPath.IXPathNavigable.

Using the interface decouples the member from a specific implementation of an XML data source.

How to fix violations

To fix a violation of this rule, change the concrete type to the suggested interface.

When to suppress warnings

It is safe to suppress a message from this rule if the specific functionality provided by the concrete type is required.

CA1011: Consider passing base types as parameters