Dziś zajmiemy się operatorami związanym z rzutowaniem typów. W przykładach będziemy używać następującej hierarchii:
public class Animal { }
public interface IMammal { }
public class Tiger : Animal, IMammal { }
Operator is służy do sprawdzenia, czy dany obiekt jest konkretnego typu, bądź czy implementuje wskazany interfejs.
object tiger = new Tiger();
if ( tiger is Animal)
{
Animal animal = (Animal) tiger;
}
if ( tiger is IMammal)
{
IMammal mammal = (IMammal) tiger;
}
Natomiast operator as rzutuje dane obiekt o ile jest on określonego typu, w przeciwnym wypadku zwraca null. Tutaj warto zauważyć, że możemy tylko rzutować na typy, które są nullowalne – nie możemy używać struktur (value type’ów).
object tiger = new Tiger();
Animal animal2 = tiger as Animal;
if ( animal2 != null)
{
// Do something
}
IMammal mammal2 = tiger as IMammal;
if (mammal2 != null)
{
// Do something
}
