Słowa kluczowe Is i As
Dzisiaj krótko o is oraz as, czyli dwóch słowach kluczowych języka C# związanych z rzutowaniem obiektów. Dzięki nim możemy bezpiecznie rzutować jeden obiekt na drugi i jeśli nie będzie to możliwe bezpiecznie obsłużyć taką operację.
Is
Is sprawdza czy obiekt może być bezpiecznie rzutowany na obiekt innego typu. Sprawdzenie może być dokonane tak do klas czy też interfejsów.
1 2 3 4 5 6 7 8 9 |
public interface SomeInterface { }; public class SomeBaseClass : SomeInterface{}; public class DeriveredClass : SomeBaseClass { }; public class OtherDeriveredClas : SomeBaseClass { }; DeriveredClass dc = new DeriveredClass(); dc is SomeInterface; // True dc is SomeBaseClass; // True dc is OtherDeriveredClas; // False |
W wersji języka C# większej lub równej 7.0 przy pomocy is możemy również utworzyć nową zmienną, do której będzie przypisane rzutowanie obiektu na dany typ.
1 2 3 4 5 6 7 8 9 10 |
public interface SomeInterface { }; public class SomeBaseClass : SomeInterface{}; public class DeriveredClass : SomeBaseClass { }; public class OtherDeriveredClas : SomeBaseClass { }; DeriveredClass dc = new DeriveredClass(); if(dc is SomeInterface data) { // can use data like SomeInterface variable } |
As
As jest bezpieczniejszym rzutowaniem. Zwyczajny cast przy nieprawidłowym rzutowaniu rzuca wyjątek, as w tym samym czasie zwraca nam bezpiecznie null. Właśnie z powodu możliwości zwrócenia null-a po każdym użyciu as powinniśmy sprawdzić czy obiekt nie jest null-em.
1 2 3 4 5 6 7 8 9 10 |
public interface SomeInterface { }; public class SomeBaseClass : SomeInterface{}; public class DeriveredClass : SomeBaseClass { }; public class OtherDeriveredClas : SomeBaseClass { }; SomeInterface data = dc as SomeInterface; if(data != null) { // data usage } |