Powiedz, jaka jest różnica między słowem kluczowym is
a as
w języku C #
Powiedz, jaka jest różnica między słowem kluczowym is
a as
w języku C #
Odpowiedzi:
W is
operator sprawdza, czy obiekt może być oddane do określonego typu.
Przykład:
if (someObject is StringBuilder) ...
Do as
operatora próby do oddania obiektu do określonego rodzaju i zwraca NULL jeśli to się nie powiedzie.
Przykład:
StringBuilder b = someObject as StringBuilder;
if (b != null) ...
Powiązane również:
Do napędu odlew próby do oddania obiektu do określonego rodzaju i zgłasza exeption jeśli to się nie powiedzie.
Przykład:
StringBuilder b = (StringBuilder)someObject.
is
nie sprawdza, czy obiekt może być rzutowany na określony typ. Liczba całkowita rzutuje na długą grzywnę, ale 10 is long
jest fałszywa.
(long)some_integer
się nie powiedzie? Jestem prawie pewien, że oboje wiemy, że to nieprawda, nawet jeśli go nie uruchomiliśmy, więc wyjaśnij, co masz na myśli.
is
: „ Pamiętaj, że operator is bierze pod uwagę tylko konwersje referencyjne, konwersje typu boxing i konwersje po rozpakowaniu. Inne konwersje, takie jak konwersje zdefiniowane przez użytkownika, nie są brane pod uwagę. ” (Msdn.microsoft.com/en-us/library/scekt9xw .aspx). Informacjeas
: „ Zauważ, że operator as wykonuje tylko konwersje odwołań, konwersje dopuszczające wartość null i konwersje typu boxing. Operator as nie może wykonywać innych konwersji, takich jak konwersje zdefiniowane przez użytkownika, które zamiast tego powinny być wykonywane przy użyciu wyrażeń rzutowania. ” ( Msdn .microsoft.com / en-us / library / cscsdfbt.aspx )
Różnica między IS i A jest taka ...
IS - Is Operator służy do sprawdzania zgodności obiektu z danym typem i zwraca wynik jako wartość logiczną (prawda lub fałsz).
AS - As Operator służy do rzutowania obiektu na dany typ lub klasę.
Dawny.
Student s = obj as Student;
jest równa:
Student s = obj is Student ? (Student)obj : (Student)null;
is
można wyrazić za pomocą as
i as
można wyrazić za pomocą is
. Oto jak zrobić is
ze as
słowem kluczowym. Bool b = obj is Student;
jest odpowiednikiem: Bool b = (obj as Student) != null;
Więcej na ten temat tutaj
Oba is
i as
słowa kluczowe są używane do rzutowania typów w C #.
Kiedy spojrzysz na kod IL użycia obu słów kluczowych, łatwo zauważysz różnicę.
Kod C #:
BaseClass baseclassInstance = new DerivedClass();
DerivedClass derivedclassInstance;
if (baseclassInstance is DerivedClass)
{
derivedclassInstance = (DerivedClass)baseclassInstance;
// do something on derivedclassInstance
}
derivedclassInstance = baseclassInstance as DerivedClass;
if (derivedclassInstance != null)
{
// do something on derivedclassInstance
}
Kod IL (dla powyższego kodu C # znajduje się na załączonym obrazku):
Kod IL do is
użycia słowa kluczowego zawiera instrukcje IL zarówno isinsta
i castclass
.
Ale kod IL do as
użycia słów kluczowych ma tylko isinsta
.
W wyżej wymienionym użyciu, dwa typy będą miały miejsce, gdy is
używane jest słowo kluczowe, i tylko jedno typowanie, gdy as
używane jest słowo kluczowe.
Uwaga: Jeśli używasz is
słowa kluczowego do sprawdzenia jakiegoś warunku i nie interesuje cię wynik rzutowania, to będzie tylko jedno rzutowanie, tj.
if (baseclassInstance is DerivedClass)
{
// do something based on the condition check.
}
is
a as
słowa kluczowe będą używane w zależności od konieczności.
Słowo kluczowe is sprawdza, czy wartość po jego lewej stronie jest wystąpieniem typu po prawej stronie. Na przykład:
if(obj is string)
{
...
}
Zauważ, że w tym przypadku będziesz musiał użyć dodatkowego jawnego rzutowania, aby otrzymać obj jako łańcuch.
Słowo kluczowe as jest używane do rzutowania typów dopuszczających wartość null. Jeśli określona wartość nie jest wystąpieniem określonego typu, zwracana jest wartość null. Na przykład:
string str = obj as string;
if(str != null)
{
...
}
Powiedziałbym: czytaj MSDN online, ale oto jest:
Operator is sprawdza, czy obiekt jest zgodny z danym typem, a wynikiem oceny jest wartość logiczna: prawda lub fałsz.
Operator as nigdy nie zgłosi wyjątku.
Operator Is, rzut, zwraca wartość true, jeśli się powiedzie. Zwraca false, jeśli rzutowanie się nie powiedzie. Dzięki niemu nie możesz przechwycić przekonwertowanej zmiennej. Ten operator jest najbardziej przydatny podczas sprawdzania typów w instrukcjach if i wyrażeniach. Is-cast jest idealny tylko wtedy, gdy zmienna wynikowa nie będzie potrzebna do dalszego użycia
Jak obsada. Dzięki niemu zyskujemy wydajność i unikamy wyjątków, gdy rzut jest nieprawidłowy. Null jest zwracane, gdy rzucanie jest niemożliwe. W przypadku typów referencyjnych zaleca się rzutowanie w postaci. Jest szybki i bezpieczny - możemy przetestować wynikową zmienną pod kątem wartości null, a następnie jej użyć. Eliminuje to dodatkowe rzuty
is OPERATOR Operator is w C # służy do sprawdzania typu obiektu i zwraca wartość bool: true, jeśli obiekt jest tego samego typu i false, jeśli nie. lub także Operator „is” służy do sprawdzania, czy wykonywany typ obiektu jest zgodny z danym typem, czy nie. Dla obiektów null zwraca false, np
if(obj is AnimalObject)
{
//Then Work
}
jako OPERATOR
Operator as wykonuje to samo zadanie co operator is, ale różnica polega na tym, że zamiast typu bool zwraca obiekt, jeśli są one zgodne z tym typem, w przeciwnym razie zwraca wartość null.W innych słowach operator `` as '' służy do wykonywania konwersji między zgodnymi rodzaje.
na przykład
Type obj = Object as Type;
Zalety as over is W przypadku operatora is, aby wpisać rzutowanie, musimy wykonać dwa kroki:
Check the Type using is
If it’s true then Type cast
W rzeczywistości wpływa to na wydajność, ponieważ za każdym razem środowisko CLR przejdzie przez hierarchię dziedziczenia, sprawdzając każdy typ podstawowy pod kątem określonego typu.
Aby tego uniknąć, użyj as, zrobi to w jednym kroku. Tylko do sprawdzenia typu używamy operatora is.
is
: Operator is służy do sprawdzania, czy typ wykonawczy obiektu jest zgodny z danym typem
as
: Operator as jest używany do wykonywania konwersji między zgodnymi typami.
object s = "this is a test";
string str=string.Empty;
if( s is string)
str = s as string;
is
wtedy as
: to unboxes dwukrotnie. W przypadku typów referencyjnych należy po prostu to zrobić as
, a następnie sprawdzić, czy nie ma wartości null, aby zobaczyć, czy zadziałało.
Spójrz na poniższy film z YouTube, który wyjaśnia różnicę w bardziej demonstracyjny i wizualny sposób: -
https://www.youtube.com/watch?v=IKmRtJcRX_I
Poniżej znajduje się długa odpowiedź z objaśnieniem kodu.
Słowo kluczowe „IS” jest przydatne do sprawdzania, czy obiekty są zgodne z typem. Na przykład w poniższym kodzie sprawdzamy, czy obiekt „ocust” jest typem klasy „Customer”.
object ocust = new Customer();
if (ocust is Customer)
{
Słowo kluczowe „JAK” pomaga w konwersji z jednego typu na inny. Na przykład w poniższym kodzie konwertujemy obiekt na typ danych string. Jeśli słowo kluczowe „AS” nie może wpisać typu rzutowania, zwraca NULL.
object o = "somestring";
string str = o as string;
IS Keyword -> sprawdza, czy typ danego obiektu jest zgodny z nowym typem obiektu. To nigdy nie zgłasza wyjątku. To jest typ boolowski… zwraca prawdę lub fałsz
`student stud = new student(){}
if(stud is student){} // It returns true // let say boys as derived class
if(stud is boys){}// It returns false since stud is not boys type
//this returns true when,
student stud = new boys() // this return true for both if conditions.`
AS Keyword: sprawdza, czy typ danego obiektu jest zgodny z nowym typem obiektu. Zwraca wartość różną od null, jeśli dany obiekt jest zgodny z nowym, w przeciwnym razie null .. To zgłasza wyjątek.
`student stud = new student(){}
// let say boys as derived class
boys boy = stud as boys;//this returns null since we cant convert stud type from base class to derived class
student stud = new boys()
boys boy = stud as boys;// this returns not null since the obj is pointing to derived class`
Oba operatory są używane do bezpiecznego odlewania typu.
Operator AS:
Operator AS sprawdza również, czy typ danego obiektu jest zgodny z nowym typem obiektu. To słowo kluczowe sprawdzi, czy typ danego obiektu jest zgodny z nowym typem obiektu. Jeśli nie jest kompatybilny z nowym, zwróci NULL.
Operator IS:
Ten operator sprawdza, czy typ obiektu jest zgodny z nowym obiektem. Jeśli jest zgodny, zwraca true, w przeciwnym razie false.