public static void Test() { ClassA.StaticFunc(); //call ClassB.StaticFunc(); //call var objA = new ClassA(); objA.BaseNormalFunc(); //callvirt objA.BaseVirtualFunc(); //callvirt objA.SubNormalFunc(); //callvirt var objB = new ClassB(); objB.BaseNormalFunc(); //callvirt objB.BaseVirtualFunc(); //callvirt objB.SubNormalFunc(); //callvirt objB.ToString(); ValueType.StaticFunc(); ValueType vt; vt.NormalFunc(); ValueType vt2 = new ValueType(); vt2.NormalFunc(); }