Lütfen C # is
ile as
anahtar kelime arasındaki farkın ne olduğunu söyleyin
Lütfen C # is
ile as
anahtar kelime arasındaki farkın ne olduğunu söyleyin
Yanıtlar:
is
Operatör kontrol bir amacı, belirli bir tür için döküm eğer.
Misal:
if (someObject is StringBuilder) ...
as
Operatör girişimleri belirli bir tür için bir nesne artığını, ve başarısız olursa geri döner boş.
Misal:
StringBuilder b = someObject as StringBuilder;
if (b != null) ...
Ayrıca ilgili:
Yayın operatörü , bir nesneyi belirli bir türe dönüştürmeye çalışır ve başarısız olursa bir istisna atar.
Misal:
StringBuilder b = (StringBuilder)someObject.
is
bir nesnenin belirli bir türe dönüştürülüp dönüştürülemeyeceğini kontrol etmez. Bir tamsayı uzun bir para cezasına çevirir ancak 10 is long
yanlıştır.
(long)some_integer
başarısız olur mu? Eminim ikimiz de çalıştırmadan bunun doğru olmadığını biliyoruz, bu yüzden lütfen ne demek istediğinizi açıklayın.
is
" o Not olup . Operatörü sadece referans dönüşümleri, boks dönüşümleri ve kutudan çıkarma dönüşüm görmesi durumunda bu, kabul edilmez kullanıcı tanımlı dönüşüm olarak diğer dönüşümler. " (Msdn.microsoft.com/en-us/library/scekt9xw .aspx). Hakkındaas
" Not bu şekilde .. Operatör gerçekleştirir tek referans dönüşümleri, null dönüşüm ve boks dönüşüm gibi yerine döküm ifadeleri kullanılarak yapılmalıdır kullanıcı tanımlı dönüşüm gibi diğer dönüşümleri, gerçekleştiremez operatör " ( msdn .microsoft.com / en-us / library / cscsdfbt.aspx )
IS ve As arasındaki fark şudur :
IS - Is Operatörü, belirli bir Türe sahip bir Nesnenin Uyumluluğunu Kontrol etmek için kullanılır ve sonucu bir Boole (Doğru veya Yanlış) olarak döndürür.
AS - Operatör olarak, Nesnenin belirli bir Türe veya bir Sınıfa Yayınlanması için kullanılır.
Ör.
Student s = obj as Student;
eşdeğerdir:
Student s = obj is Student ? (Student)obj : (Student)null;
is
ile ifade edilebilir as
ve as
ifade edilebilir is
. Anahtar kelime is
ile nasıl yapılacağı aşağıda açıklanmıştır as
. Bool b = obj is Student;
eşdeğerdir: Bool b = (obj as Student) != null;
Bu konuda daha fazla bilgi burada
Hem is
ve hem de as
anahtar sözcükler, C #'da tür çevirimi için kullanılır.
Her iki anahtar kelimenin IL kodlarına baktığınızda farkı kolayca anlayacaksınız.
C # Kodu:
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
}
IL kodu (yukarıdaki C # kodu için ekli resimdedir):
is
Anahtar kelime kullanımı
için IL kodu, hem isinsta
ve hem de IL talimatlarını içerir castclass
.
Ancak as
anahtar kelime kullanımı için IL kodu yalnızca vardır isinsta
.
Yukarıda belirtilen kullanımda, is
anahtar kelimenin kullanıldığı iki typecast ve anahtar kelimenin kullanıldığı yalnızca bir typecast gerçekleşecektir as
.
Not: is
Bazı koşulları kontrol etmek için anahtar kelime kullanıyorsanız ve typecast sonucuyla herhangi bir ilginiz yoksa, o zaman yalnızca bir typecast olacaktır, yani
if (baseclassInstance is DerivedClass)
{
// do something based on the condition check.
}
is
ve as
anahtar kelimeler ihtiyaca göre kullanılacaktır.
İs anahtar sözcüğü, sol tarafındaki değerin sağ taraftaki türün bir örneği olup olmadığını kontrol eder. Örneğin:
if(obj is string)
{
...
}
Bu durumda nesneyi dize olarak almak için fazladan açık bir çevirme kullanmanız gerekeceğini unutmayın.
As anahtar sözcüğü, boş değer atanabilir türleri yayınlamak için kullanılır. Belirtilen değer, belirtilen türün bir örneği değilse, null döndürülür. Örneğin:
string str = obj as string;
if(str != null)
{
...
}
Şunu söyleyebilirim: Çevrimiçi MSDN'yi okuyun, ancak işte burada:
İs operatörü, bir nesnenin belirli bir türle uyumlu olup olmadığını ve değerlendirmenin sonucunun bir Boolean: true veya false olup olmadığını kontrol eder.
As operatörü asla bir istisna oluşturmaz.
İs operatörü, bir cast, başarılı olursa true döndürür. Oyuncular başarısız olursa yanlış döndürür. Bununla, dönüştürülen değişkeni yakalayamazsınız. Bu işleç en çok if-ifadelerindeki ve ifadelerdeki türleri kontrol ederken kullanışlıdır. İs-cast, yalnızca ortaya çıkan değişken daha fazla kullanım için gerekli olmayacaksa idealdir.
Oyuncular gibi. Bununla, performans kazanıyor ve bir atma geçersiz olduğunda istisnalardan kaçınıyoruz. Kullanmak imkansız olduğunda Null döndürülür. Referans türleri için as-cast önerilir. Hem hızlı hem de güvenlidir. Elde edilen değişkeni null değerine karşı test edebilir ve sonra kullanabiliriz. Bu fazladan yayınları ortadan kaldırır
is OPERATOR C # 'daki is operatörü, nesne tipini kontrol etmek için kullanılır ve bir bool değeri döndürür: nesne aynı tipse true, değilse false. ya da "eşittir" operatörü, bir nesnenin çalışma zamanı tipinin belirli bir türle uyumlu olup olmadığını kontrol etmek için kullanılır. Boş nesneler için yanlış döndürür, örn.
if(obj is AnimalObject)
{
//Then Work
}
OPERATÖR olarak
As operatörü is operatörü ile aynı işi yapar, ancak fark bool yerine nesneyi döndürür, bu türle uyumluysa nesneyi döndürür, aksi takdirde null döndürür.Başka bir deyişle, 'as' operatörü, uyumlu türleri.
Örneğin
Type obj = Object as Type;
Üzerinde olduğu gibi avantajları is operatörü durumunda, cast yazmak için iki adım yapmamız gerekir:
Check the Type using is
If it’s true then Type cast
Aslında bu, CLR her seferinde miras hiyerarşisinden geçeceği ve her bir temel türü belirtilen türe göre kontrol edeceği için performansı etkiler.
Bunu önlemek için olarak kullanın, tek adımda yapacaktır. Yalnızca türü kontrol etmek için is operatörünü kullanmalıyız.
is
: İs operatörü, bir nesnenin çalışma zamanı türünün belirli bir türle uyumlu olup olmadığını kontrol etmek için kullanılır
as
: As operatörü, uyumlu türler arasında dönüşüm gerçekleştirmek için kullanılır.
object s = "this is a test";
string str=string.Empty;
if( s is string)
str = s as string;
is
zaman yapmak pahalıdır as
: iki kez açılır. Başvuru türleri için, sadece yapmalı as
, sonra işe yarayıp yaramadığını görmek için null olup olmadığını kontrol etmelisiniz.
Farkı daha açıklayıcı ve görsel bir şekilde açıklayan aşağıdaki youtube videosuna bir göz atın: -
https://www.youtube.com/watch?v=IKmRtJcRX_I
Aşağıda, kod açıklamasıyla birlikte uzun yanıt verilmektedir.
"IS" anahtar sözcüğü, nesnelerin bir türle uyumlu olup olmadığını kontrol etmek için kullanışlıdır. Örneğin aşağıdaki kodda “ocust” nesnesinin bir “Customer” sınıfı türü olup olmadığını kontrol ediyoruz.
object ocust = new Customer();
if (ocust is Customer)
{
"AS" anahtar kelimesi, bir türden diğerine dönüştürme yapmaya yardımcı olur. Örneğin aşağıdaki kodda nesneyi bir dizgi veri türüne dönüştürüyoruz. "AS" anahtar sözcüğü cast yazamazsa, NULL döndürür.
object o = "somestring";
string str = o as string;
IS Anahtar Kelime -> belirli bir nesnenin türünün yeni nesne türüyle uyumlu olup olmadığını kontrol eder. Asla bir istisna atmaz. Bu bir Boole türüdür .. doğru veya yanlış döndürür
`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 Anahtar Kelime: belirli bir nesnenin türünün yeni nesne türü ile uyumlu olup olmadığını kontrol eder. Verilen nesne yenisiyle uyumluysa boş olmayan döndürür, aksi takdirde boş .. Bu bir istisna atar.
`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`
Her iki operatör de güvenli tip döküm için kullanılır.
Operatör AS:
AS operatörü, belirli bir nesnenin türünün yeni nesne türüyle uyumlu olup olmadığını da kontrol eder. Bu anahtar sözcük, belirli bir nesnenin türünün yeni nesne türü ile uyumlu olup olmadığını kontrol edecektir. Yenisiyle uyumlu değilse NULL döndürür.
IS Operatörü:
Bu Operatör, bir nesnenin türünün yeni nesne ile uyumlu olup olmadığını kontrol eder. Uyumlu ise true, aksi takdirde false döndürür.