== Why is this an issue? Since the compiler will automatically invoke the base type's no-argument constructor, there's no need to specify its invocation explicitly. Also, when only a single ``++public++`` parameterless constructor is defined in a class, then that constructor can be removed because the compiler would generate it automatically. Similarly, empty ``++static++`` constructors and empty destructors are also wasted keystrokes. === Noncompliant code example [source,csharp] ---- class X { public X() { } // Noncompliant static X() { } // Noncompliant ~X() { } // Noncompliant ... } class Y : X { public Y(int parameter) : base() // Noncompliant { /* does something with the parameter */ } } ---- === Compliant solution [source,csharp] ---- class X { ... } class Y : X { public Y(int parameter) { /* does something with the parameter */ } } ---- ifdef::env-github,rspecator-view[] ''' == Implementation Specification (visible only on this page) === Message * Remove this redundant "base()" call. * Remove this redundant [constructor|destructor]. ''' == Comments And Links (visible only on this page) === supercedes: S3575 === on 20 Jul 2015, 11:35:50 Tamas Vajk wrote: \[~ann.campbell.2] I adjusted the description a bit. === on 20 Jul 2015, 14:12:01 Ann Campbell wrote: looks good [~tamas.vajk] === on 20 May 2021, 10:24:19 Costin Zaharia wrote: We might need to reconsider the recommendation for static constructors since even if empty they do change the generated IL and the runtime behavior. See: https://csharpindepth.com/articles/BeforeFieldInit[C# and beforefieldinit] endif::env-github,rspecator-view[]