public class MyClass<T>
{
public static readonly String MyStringValue;
static MyClass()
{
MyStringValue = GenerateString();
}
private static String GenerateString()
{
//Dynamically generated ONCE per type (hence, not const)
}
public void Foo()
{
Console.WriteLine(MyStringValue);
}
}
Насколько я понимаю, статическая String только для чтения не будет сгенерирована, пока не будет вызван статический конструктор для класса.Но статический конструктор не будет вызываться до тех пор, пока не будет получен доступ к одному из статических методов или переменных.
В многопоточной среде возможно возникновение проблем из-за этого?По сути, статический конструктор по умолчанию одноэлементный заблокирован или я должен сделать это сам?То есть ... я должен сделать следующее:
private static Object MyLock;
static MyClass()
{
lock(MyLock)
{
if (MyStringValue == null)
MyStringValue = GenerateString();
}
}