1) Теоретически, мой объект InfoStrings может быть собран мусором?
Нет, это статическое поле, которое после назначения не будет собирать мусор.
2) Я делаю там правильную блокировку?
Я бы порекомендовал вам заблокировать частный статический объект:
private static object _syncRoot = new object();
...
lock (_syncRoot)
{
var instance = InfoStrings.GetMe();
}
Вы также можете найти следующую статью полезной при реализации шаблона синглтона в C #. Пример:
public sealed class InfoStrings
{
private InfoStrings()
{
}
public static InfoStrings Instance
{
get { return Nested.instance; }
}
private class Nested
{
static Nested()
{
}
internal static readonly InfoStrings instance = new InfoStrings();
}
}
и тогда вам не нужно блокировать, чтобы получить экземпляр:
var instance = InfoStrings.Instance;