
Inline adoc files when they are included exactly once. Also fix language tags because this inlining gives us better information on what language the code is written in.
71 lines
1.3 KiB
Plaintext
71 lines
1.3 KiB
Plaintext
== Why is this an issue?
|
|
|
|
When a ``++static++`` constructor serves no other purpose that initializing ``++static++`` fields, it comes with an unnecessary performance cost because the compiler generates a check before each ``++static++`` method or instance constructor invocation.
|
|
|
|
|
|
Instead, inline initialization is highly recommended.
|
|
|
|
|
|
=== Noncompliant code example
|
|
|
|
[source,csharp]
|
|
----
|
|
namespace myLib
|
|
{
|
|
public class Foo
|
|
{
|
|
static int i;
|
|
static string s;
|
|
|
|
static Foo() // Noncompliant
|
|
{
|
|
i = 3;
|
|
ResourceManager sm = new ResourceManager("strings", Assembly.GetExecutingAssembly());
|
|
s = sm.GetString("mystring");
|
|
}
|
|
}
|
|
}
|
|
----
|
|
|
|
|
|
=== Compliant solution
|
|
|
|
[source,csharp]
|
|
----
|
|
namespace myLib
|
|
{
|
|
public class Foo
|
|
{
|
|
static int i =3;
|
|
static string s = InitString();
|
|
|
|
static string InitString()
|
|
{
|
|
ResourceManager sm = new ResourceManager("strings", Assembly.GetExecutingAssembly());
|
|
return sm.GetString("mystring");
|
|
}
|
|
}
|
|
}
|
|
----
|
|
|
|
|
|
ifdef::env-github,rspecator-view[]
|
|
|
|
'''
|
|
== Implementation Specification
|
|
(visible only on this page)
|
|
|
|
=== Message
|
|
|
|
Initialize all "static" data inline and remove the "static" constructor
|
|
|
|
|
|
=== Highlighting
|
|
|
|
Primary: Static constructor signature
|
|
|
|
Secondary: Uninitialized static fields
|
|
|
|
|
|
endif::env-github,rspecator-view[]
|