Nie mozna rzutować wyżych klas na dół...
Jeśli ma się klasę bazową i się ją stworzy to z góry wiemy że rzutowanie do bardziej rozwiniętych klas jest niemoźliwe...
Jeśli masz np. BaseClass myObj = new DerrivedClass();
To możesz bezproblemowo możesz rzutować w dół.
Streszczenie: Obiekt klasy X który dziedziczy z klasy Y może zostać rzutowany na kasę Y, jeśli klasa także coś dziedziczy ( np.Klasa J) to ten obiekt klasy X może także być rzutowany do klasy J.
Ale jeśli tworzyliśmy Obiekt klasy J to nie można rzutować niżej! gdyż rozerzenia które występują niźej nie istnieją w klasie J!
Tu prosty przykład:
using System;
using System.Text;
namespace TestMode
{
public class BaseClass
{
}
public class DerrivedClass : BaseClass
{
}
public class klasa : DerrivedClass
{}
public class MainClass
{
public static void Main ()
{
BaseClass myObj = new klasa();
DerrivedClass der = (DerrivedClass)myObj; //No problem
klasa kl = (klasa)myObj; //No problem
myObj = new DerrivedClass();
der = (DerrivedClass)myObj; //No problem
kl = (klasa)myObj; //problem!
myObj = new BaseClass();
der = (DerrivedClass)myObj; //problem!
kl = (klasa)myObj; //problem!
Console.ReadKey ();
}
}
}
i przy okazji, nie używaj varów. takiemu noobowi jak ja zajeło mi jakieś 10 minut aby ogarnąć twój kod, dopiero po zmianie na poszczególne typy danych znacząco ułatwiło mi czytanie.
Więc podejrzewam że ty także możesz mieć problemy z tym jak "będzieś do czegoś wracał".
Pozdrawiam.