Operatorii is si as
Costul operatorilor as is is | |
| |
static void IsDemo(object str) |
-- parametrul este incarcat si se testeaze daca este de tip System.String
-- se incarca pe stiva rezultatul operatiei IL_0004 > IL_0009 (in acest caz e 1)
-- se calculeaza IL_000a == IL_000a (adica 1 == 0) si se pastreaza rezultatul in loc.1
-- daca este adevarat (1 == 0) se sare la instructiunea IL_001c, in acest caz nu se sare
-- castul e sigur si se poate face fara aruncarea exceptiei InvalidCastException
|
|
-- se testeaza daca clasa obiectului incarcat la IL_0001 este un tip derivat al clasei System.String (System.String este derivat din System.String); daca in loc de System.String ar fi fost o interfata testul se rezuma la faptul daca clasa obiectului implementeaza respectiva interfata. In caz de succes se va face castul la System.String. Altfel este incarcat null. Daca obiectul in sine e null, la fel este incarcat null. Nici o exceptie nu e aruncata la runtime (doar la compilare in cazul in care tipul clasei sau interfetei nu este cunoscut de catre compilator se va da o exceptie TypeLoadException)
|
|
--Se incearca a se face castul obiectului la clasa System.String. In caz de testul e fara succes va fi aruncata exceptia InvalidCastException. In caz ca obiectul asupra caruia se face castul e null, operatia de cast se considera OK si e returnat noul obiect ca referinta nula (adica null).
|
valoarea medie la fiecare 10 000 iteratii in nanosecunde | |||
---|---|---|---|
Cast cu "is" | Cast cu "as" | Explicit cast | String de test |
610.217220345044 | 51.7663557798547 | 49.7828634644906 | a |
21.4831773311971 | 13.9123827190327 | 12.3200015644446 | aa |
20.2260343144171 | 13.9403192305167 | 12.3758745874126 | aaa |
21.4552408197131 | 13.9123827190327 | 13.2698429549007 | aaaa |
20.2539708259011 | 13.9403192305167 | 12.3479380759286 | aaaaa |
20.1980978029331 | 15.2253987587808 | 13.3257159778687 | aaaaaa |
20.2539708259011 | 14.0241287649687 | 12.3758745874126 | aaaaaaa |
20.2819073373851 | 13.9682557420007 | 12.4038110988966 | aaaaaaaa |
20.1980978029331 | 13.9403192305167 | 12.3758745874126 | aaaaaaaaa |
20.2539708259011 | 13.9682557420007 | 13.7447636501287 | aaaaaaaaaa |
Comments
Post a Comment