- public abstract class Factory<T> where T : class { 
-     public abstract T Build<U>(U obj) where U : class; 
- } 
- public class Quadrado { 
-     public int Largura { get; set; } 
-     public int Altura { get; set;} 
- } 
- public class Retangulo { 
-     public int Largura { get; set; } 
-     public int Altura { get; set; } 
- } 
- public class QuadradoFactory: Factory<Quadrado> { 
-     public override Quadrado Build<U>(U o) { 
- 		var obj = o as Retangulo; 
- 		if (obj == null) return null; 
- 		return new Quadrado() { Largura = obj.Largura, Altura = obj.Altura }; 
- 	} 
- } 
- public class Program { 
-     public static void Main() { 
-         var f = new QuadradoFactory(); 
-         var r = new Retangulo(){ Largura = 2, Altura = 4 }; 
-         var q = f.Build<Retangulo>(r); 
-         System.Console.WriteLine("Largura: " + q.Largura + " Altura: " + q.Altura); 
-     } 
- } 
-   
- //https://pt.stackoverflow.com/q/325885/101 
				cHVibGljIGFic3RyYWN0IGNsYXNzIEZhY3Rvcnk8VD4gd2hlcmUgVCA6IGNsYXNzIHsKICAgIHB1YmxpYyBhYnN0cmFjdCBUIEJ1aWxkPFU+KFUgb2JqKSB3aGVyZSBVIDogY2xhc3M7Cn0KcHVibGljIGNsYXNzIFF1YWRyYWRvIHsKICAgIHB1YmxpYyBpbnQgTGFyZ3VyYSB7IGdldDsgc2V0OyB9CiAgICBwdWJsaWMgaW50IEFsdHVyYSB7IGdldDsgc2V0O30KfQpwdWJsaWMgY2xhc3MgUmV0YW5ndWxvIHsKICAgIHB1YmxpYyBpbnQgTGFyZ3VyYSB7IGdldDsgc2V0OyB9CiAgICBwdWJsaWMgaW50IEFsdHVyYSB7IGdldDsgc2V0OyB9Cn0KcHVibGljIGNsYXNzIFF1YWRyYWRvRmFjdG9yeTogRmFjdG9yeTxRdWFkcmFkbz4gewogICAgcHVibGljIG92ZXJyaWRlIFF1YWRyYWRvIEJ1aWxkPFU+KFUgbykgewoJCXZhciBvYmogPSBvIGFzIFJldGFuZ3VsbzsKCQlpZiAob2JqID09IG51bGwpIHJldHVybiBudWxsOwoJCXJldHVybiBuZXcgUXVhZHJhZG8oKSB7IExhcmd1cmEgPSBvYmouTGFyZ3VyYSwgQWx0dXJhID0gb2JqLkFsdHVyYSB9OwoJfQp9CnB1YmxpYyBjbGFzcyBQcm9ncmFtIHsKICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBNYWluKCkgewogICAgICAgIHZhciBmID0gbmV3IFF1YWRyYWRvRmFjdG9yeSgpOwogICAgICAgIHZhciByID0gbmV3IFJldGFuZ3VsbygpeyBMYXJndXJhID0gMiwgQWx0dXJhID0gNCB9OwogICAgICAgIHZhciBxID0gZi5CdWlsZDxSZXRhbmd1bG8+KHIpOwogICAgICAgIFN5c3RlbS5Db25zb2xlLldyaXRlTGluZSgiTGFyZ3VyYTogIiArIHEuTGFyZ3VyYSArICIgQWx0dXJhOiAiICsgcS5BbHR1cmEpOwogICAgfQp9CgovL2h0dHBzOi8vcHQuc3RhY2tvdmVyZmxvdy5jb20vcS8zMjU4ODUvMTAx