public static void GenericTest() { var c4 = new C4 <C2>(); Console.WriteLine("c4 is C4<C2> : {0}", c4 is C4 <C2>);//c4 is C4는 ㅅㅂ 안통하네 Console.WriteLine("c4 is C4<I1> : {0}", c4 is C4 <I1>); Console.WriteLine("c4 is C4<C1> : {0}", c4 is C4 <C1>); Console.WriteLine("c4.GetType() == typeof(C4<>) : {0}", c4.GetType() == typeof(C4 <>)); Console.WriteLine("c4 is C4.GetType().IsGenericType : {0}", c4.GetType().IsGenericType); Console.WriteLine("c4.GetType().GetGenericTypeDefinition()==typeof(C4<>) : {0}", c4.GetType().GetGenericTypeDefinition() == typeof(C4 <>)); //Result : TFFFTT //C4<I1> c5 = (C4<I1>)c4; casting 불가 //C4<C2> c6 = (c4<C2>)c4; casting 불가 Console.WriteLine(c4.GetType().BaseType); Console.WriteLine(Convenience.IsGenericTypeOf(typeof(C4 <>), c4)); Console.WriteLine(c4.GetType().GetGenericTypeDefinition()); Console.WriteLine("{0}, {1}", c4.GetType().GetGenericArguments()[0], c4.GetType().GetGenericArguments().Length); Console.WriteLine(c4.GetType().GetGenericTypeDefinition() == typeof(C4 <C1>)); Console.WriteLine(c4.GetType().GetGenericTypeDefinition() == typeof(C4 <C2>)); Console.WriteLine(c4 is C4 <C2>); Console.WriteLine(c4.GetType() == typeof(C4 <C2>)); Console.WriteLine(c4.GetType().GetGenericTypeDefinition() == typeof(C4 <>)); Console.WriteLine(typeof(C4 <C1>)); Console.WriteLine(typeof(C4 <C1>).GetGenericArguments()[0]); Console.WriteLine(typeof(C4 <>).GetGenericArguments().Length); Console.WriteLine(typeof(C4 <>).GetGenericArguments()[0]); Console.WriteLine(typeof(C4 <>) == typeof(C4 <>)); Console.WriteLine(typeof(C4 <int>) == typeof(C4 <>)); Console.WriteLine(Convenience.IsGenericTypeOf(typeof(C4 <>), c4)); Console.WriteLine(Convenience.IsGenericTypeOf(typeof(C4 <C2>), c4)); Console.WriteLine(Convenience.IsGenericTypeOf(typeof(C4 <C1>), c4)); Console.WriteLine(Convenience.IsGenericTypeOf(typeof(C4 <C3>), c4)); Console.WriteLine(Convenience.IsGenericTypeOf(typeof(C4 <I1>), c4)); Console.WriteLine("--------------------"); var c2 = new C2(); Console.WriteLine(c2.GetType().GetInterfaces().Contains <Type>(typeof(I1))); }