public static int Indirect() { bool success = true; // The generic case. MethodsFired mfGen = MethodsFired.None; Bar bar = new Bar(); bar.FV(ref mfGen); if ((mfGen ^ (MethodsFired.Public)) != 0) { Console.WriteLine("FAIL!"); Console.WriteLine("\tExpected: {0}", MethodsFired.Public); Console.WriteLine("\tGot: {0}", mfGen); success = false; } mfGen = MethodsFired.None; Int <Bar, Foo <Bar> > ibar = bar; ibar.FV(ref mfGen); if ((mfGen ^ (MethodsFired.ExplicitInt | MethodsFired.Public)) != 0) { Console.WriteLine("FAIL!"); Console.WriteLine("\tExpected: {0}", MethodsFired.ExplicitInt | MethodsFired.Public); Console.WriteLine("\tGot: {0}", mfGen); success = false; } if (success) { Console.WriteLine("PASS"); return(PASS); } else { return(FAIL); } }