using CSUnit; using System; public class TestCasts : TestCase { private BaseClass baseClass; private DerivedClass derivedClass; protected override void Setup() { baseClass = new BaseClass(); derivedClass = new DerivedClass(); } protected override void Cleanup() {} public TestCasts(string name) : base(name) {} public void TestSimpleCasts() { AssertEquals(10, baseClass.getNum(10)); AssertEquals(11, derivedClass.getNum(10)); //test allowed cast try { BaseClass castedDerivedClass = derivedClass; AssertEquals(11, castedDerivedClass.getNum(10)); } catch (Exception) { Fail(); } //test not allowed cast try { DerivedClass castedBaseClass = (DerivedClass) baseClass; Fail(); } catch (Exception) { } } public void TestSimpleInterfaceCasts() { //test not allowed cast try { INum num = (INum) baseClass; Fail(); } catch (Exception) { } //test allowed cast try { INum num = derivedClass; AssertEquals(666, num.getNum()); } catch (Exception) { Fail(); } } } //----------------- //class definitions //----------------- public class BaseClass { public BaseClass() { } public virtual int getNum(int num) { return num; } } public class DerivedClass : BaseClass, INum { public DerivedClass() { } // overridden method from base class public override int getNum(int num) { return num + 1; } // method from interface public int getNum() { return 666; } } //--------------------- //interface definitions //--------------------- public interface INum { int getNum(); }