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 }