public abstract class singleton<T>
private static T instance;
private static Func<T> act;
private static readonly object padlock = new object ();
protected static void initializer(Func<T> action) {act = action; }
protected static T Instance
if (singleton<T>.instance == null) { instance = act(); }
return singleton<T>.instance;
public class Printer : singleton<Printer>
public new static Printer Instance
Printer.initializer(() =>
Console.WriteLine("System: Printer Singleton Initialized");
return singleton<Printer>.Instance;
public void print(string m) { Console.WriteLine("To Printer; " + m); }
public class Logger : singleton<Logger>
public new static Logger Instance
Console.WriteLine("System: Logger Singleton Service initiated");
return singleton<Logger>.Instance;
public void log(string m) { Console.WriteLine("Logger: " + m); }
public static class Program
public static void Main()
Logger.Instance.log("test loegger");
Logger.Instance.log("hello logger");
Printer.Instance.print("hello printer");
Logger.Instance.log("hello logger again");