using System;
public class Test
{
public static void Main()
{
var lazy = new SuperLazy<Foo>();
Console.WriteLine(lazy.Value.Bar);
}
}
public class Foo
{
public int Bar { get; set; }
public Foo()
{
Bar = 42;
}
}
public class SuperLazy<T> : Lazy<T>
where T : new()
{
public SuperLazy()
: base(() => new T())
{
}
}
dXNpbmcgU3lzdGVtOwoKcHVibGljIGNsYXNzIFRlc3QKewoJcHVibGljIHN0YXRpYyB2b2lkIE1haW4oKQoJewoJCXZhciBsYXp5ID0gbmV3IFN1cGVyTGF6eTxGb28+KCk7CgkJQ29uc29sZS5Xcml0ZUxpbmUobGF6eS5WYWx1ZS5CYXIpOwoJfQp9CgpwdWJsaWMgY2xhc3MgRm9vCnsKCXB1YmxpYyBpbnQgQmFyIHsgZ2V0OyBzZXQ7IH0KCXB1YmxpYyBGb28oKQoJewoJCUJhciA9IDQyOwoJfQp9CgpwdWJsaWMgY2xhc3MgU3VwZXJMYXp5PFQ+IDogTGF6eTxUPgogICAgd2hlcmUgVCA6IG5ldygpCnsKCXB1YmxpYyBTdXBlckxhenkoKQoJCSA6IGJhc2UoKCkgPT4gbmV3IFQoKSkKCXsKCX0KfQ==