svn proplist -v -R mylocalfolder/ | grep svn:ignore -B 1
Это ваш ответ, dunxd. С левой стороны будут перечислены все реквизиты. Grep с правой стороны отфильтрует их.
Это канонический, потокобезопасный, ленивый шаблон Singleton в C # :
public sealed class Singleton
{
Singleton(){}
public static Singleton Instance
{
get
{
return Nested.instance;
}
}
class Nested
{
// Explicit static constructor to tell C# compiler
// not to mark type as beforefieldinit
static Nested() {}
internal static readonly Singleton instance = new Singleton();
}
}
To prevent from having to copy the singleton code, you could make the type generic, as such:
public abstract class Singleton<T>
where T: class, new()
{
public static T Instance
{
get { return Nested.instance; }
}
private class Nested
{
// Explicit static constructor to tell C# compiler
// not to mark type as beforefieldinit
static Nested() { }
internal static readonly T instance = new T();
}
}
public sealed class MyType : Singleton<MyType>
{
}
class Program
{
static void Main()
{
// two usage pattterns are possible:
Console.WriteLine(
ReferenceEquals(
Singleton<MyType>.Instance,
MyType.Instance
)
);
Console.ReadLine();
}
}
Вы измеряли производительность?
Считаете ли вы, что вызов дополнительной функции дешевле, чем если бы?
Я согласен с другими, что использование статического ctor работает хорошо для этого инициализация. Это также избавит вас от неотъемлемого состояния гонки, которое существует с тех пор, как .net гарантирует, что статические конструкторы будут вызываться только один раз.
Все дело в неэффективности: ...
Какая неэффективность?
Эти инструкции приведут к чрезвычайно быстрой фрагменты ассемблерного кода. Я полностью уверен, что попытки «оптимизировать» это ничего не дадут. Даже если вы придумаете что-то более быстрое, это будет связано со значительной сложностью.
Если у вас нет убедительных доказательств того, что этот код влияет на вашу производительность, вам следует использовать самый простой подход, который решит вашу проблему.
Я всегда использую этот обычный (неленивый) (вы можете вложить его, как другие примеры): (требуется с использованием System.Reflection;
)
public class SingletonBase<T> where T : class
{
static SingletonBase()
{
}
public static readonly T Instance =
typeof(T).InvokeMember(typeof(T).Name,
BindingFlags.CreateInstance |
BindingFlags.Instance |
BindingFlags.Public |
BindingFlags.NonPublic,
null, null, null) as T;
}