All pastes #36276 Raw Edit

Something

public text v1 · immutable
#36276 ·published 2006-01-09 18:28 UTC
rendered paste body
using System;

public class TestCasts
{

	private BaseClass baseClass = new BaseClass();
	private DerivedClass derivedClass = new DerivedClass();
	
	public TestCasts() {}

	public int runTests()
	{
		if (TestSimpleCasts() < 0)
			return -1;
		if (TestSimpleInterfaceCasts() < 0)
			return -2;
		if (TestSimpleBoxingUnboxing() < 0)
			return -3;
		if (TestAdvancedBoxingUnboxing() < 0)
			return -4;

		return 0;
	}

	public int TestSimpleCasts()
	{
		int res = 0;
		
		if (10 != baseClass.getNum(10))
			res -= 1;
		if (11 != derivedClass.getNum(10))
			res -= 1;

		//test allowed cast
		try {
			BaseClass castedDerivedClass = derivedClass;
			if (castedDerivedClass.getNum(10) != 11)
				res -= 1;
		} catch (Exception) {
			res -= 1;
		}

		//test not allowed cast
		try {
			DerivedClass castedBaseClass = (DerivedClass) baseClass;
			res -= 1;
		} catch (Exception) {
		}

		return res;
	}

	public int TestSimpleInterfaceCasts()
	{
		int res = 0;
		
		//test not allowed cast
		try {
			INum num = (INum) baseClass;
			res -= 1;
		} catch (Exception) {
		}

		//test allowed cast
		try {
			INum num = derivedClass;
			if (num.getNum() != 666)
				res -= 1;
		} catch (Exception) {
			res -= 1;
		}

		return res;
	}
	
	public int TestSimpleBoxingUnboxing()
	{
		int res = 0;
		int i = 100;
		object box = i;
		
		//boxing
		if (box is int) {} else		
			res -= 1;

		//unboxing
		int j = (int) box;
		if (100 != j)
			res -= 1;

		return res;
	}

	public int TestAdvancedBoxingUnboxing()
	{
		int res = 0;
		
		//simple object test
		//boxing
		object box = baseClass;
		if (box is BaseClass) {} else
			res -= 1;
		//unboxing
		BaseClass newBaseClass = (BaseClass) box;
		if (10 != newBaseClass.getNum(10))
			res -= 1;

		//advanced object test
		//boxing
		box = derivedClass;
		if (box is DerivedClass) {} else
			res -= 1;
		if (box is BaseClass) {} else
			res -= 1;
		//unboxing
		newBaseClass = (BaseClass) box;
		if (11 != newBaseClass.getNum(10))
			res -= 1;
		DerivedClass newDerivedClass = (DerivedClass) box;
		if (11 != newDerivedClass.getNum(10))
			res -= 1;

		return res;
	}
}

//-----------------
//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();
}