C#idiomatic C#
ca2256fundamentals/code-analysis/quality-rules

Code analysis

CA2256: All members declared in parent interfaces must have an implementation in a DynamicInterfaceCastableImplementation-attributed interface

Learn about code analysis rule CA2256: All members declared in parent interfaces must have an implementation in a DynamicInterfaceCastableImplementation-attributed interface

CA2256 Usage enabled by default in .NET 10: As warning
Fix is breaking or non-breaking Non-breakingApplicable languages C# and Visual Basic

Cause

An interface with System.Runtime.InteropServices.DynamicInterfaceCastableImplementationAttribute has a non-implemented member.

Rule description

Types attributed with System.Runtime.InteropServices.DynamicInterfaceCastableImplementationAttribute act as an interface implementation for a type that implements the IDynamicInterfaceCastable type. As a result, it must provide an implementation of all of the members defined in the inherited interfaces, because the type that implements IDynamicInterfaceCastable will not provide them otherwise.

How to fix violations

Implement the missing interface members.

Example

sample · csharpdocs/fundamentals/code-analysis/quality-rules/snippets/csharp/all-rules/ca2256.cssnippet1

csharp
using System.Runtime.InteropServices;

namespace ca2256
{
    //<snippet1>
    interface IParent
    {
        void ParentMethod();
    }

    // This interface violates the rule.
    [DynamicInterfaceCastableImplementation]
    interface IBadChild : IParent
    {
        static void ChildMethod()
        {
            // ...
        }
    }

    // This interface satisfies the rule.
    [DynamicInterfaceCastableImplementation]
    interface IGoodChild : IParent
    {
        static void ChildMethod()
        {
            // ...
        }

        void IParent.ParentMethod()
        {
            // ...
        }
    }
    //</snippet1>
}

When to suppress errors

Do not suppress a warning from this rule.

See also