public static void Main() {
BaseClass obj1=new BaseClass();
CheckReturnedInt(obj1.F1("obj1"), 1);
CheckReturnedString(obj1.F2("obj1"), "String returned from BaseClass.F2:obj1");
CheckReturnedString(obj1.NonVirtualFunc(11), "String returned from BaseClass.NonVirtualFunc:11");
Console.WriteLine("");
DerivedClass obj2=new DerivedClass();
CheckReturnedInt(obj2.F1("obj2"), 2);
CheckReturnedString(obj2.F2("obj2"), "String returned from DerivedClass.F2:obj2");
CheckReturnedString(obj2.NonVirtualFunc(15), "String returned from DerivedClass.NonVirtualFunc:30");
Console.WriteLine("");
BaseClass objectRef;
objectRef = obj1;
CheckReturnedInt(objectRef.F1("objectRef is now obj1"), 1);
CheckReturnedString(objectRef.F2("objectRef is now obj1"), "String returned from BaseClass.F2:objectRef is now obj1");
CheckReturnedString(objectRef.NonVirtualFunc(11), "String returned from BaseClass.NonVirtualFunc:11");
Console.WriteLine("");
objectRef = obj2;
CheckReturnedInt(objectRef.F1("objectRef is now obj2"), 2);
CheckReturnedString(objectRef.F2("objectRef is now obj2"), "String returned from DerivedClass.F2:objectRef is now obj2");
CheckReturnedString(objectRef.NonVirtualFunc(15), "String returned from BaseClass.NonVirtualFunc:15");
Console.WriteLine("");
if (failed) {
System.Environment.ExitCode = 1;
}
else {
System.Environment.ExitCode = 0;
}
}