/RequiredStaticMembers

Roslyn analyzer to enforce types to implement static virtual interface members

Primary LanguageC#MIT LicenseMIT

RequiredStaticMembers

NuGet GitHub license

Enforce types to implement static virtual interface members

using Svee4.RequiredStaticMembers;

interface INode
{
    [Required]
    public static virtual string Color => RequiredStaticMemberAccessException.Throw(nameof(Color));
}

class GreenNode : INode
{
    // No error - property is implemented as expected
    public static string Color => "Green";
}

class BlueNode : INode
{
    // Error RSM001: Type 'BlueNode' does not implement required static member 'GetColor' from interface 'INode'
}

Why?

  • Problem: An interface with a static abstract member cannot be used as a generic, such as List<T>.
  • Solution: Replace the abstract modifier with virtual.
  • Problem: Deriving classes are no longer required to implement the member. The interface must provide an implementation, likely one that throws an exception at runtime.
  • Solution: Use [RequiredAttribute] to enforce all deriving classes to implement the static member, making accidental calls to the default implementation impossible.

How do i use it?

  1. Install the package from Nuget
  2. Give a static interface member the attribute Svee4.RequiredStaticMembers.RequiredAttribute
  3. All done! A deriving type that does not implement the given member will cause an error

I have an issue or I want to participate in development

Please open an issue or discussion

Acknowledgments