Скажіть, будь ласка, у чому різниця між ключовим словом isта asключовим словом у C #
Скажіть, будь ласка, у чому різниця між ключовим словом isта asключовим словом у C #
Відповіді:
В isоператорі перевіряє , є чи об'єкт може бути приведений до типу конкретного.
Приклад:
if (someObject is StringBuilder) ...
В asоператорі намагається привести об'єкт до типу конкретного, і повертає нульове значення , якщо вона виходить з ладу.
Приклад:
StringBuilder b = someObject as StringBuilder;
if (b != null) ...
Також пов'язані:
В операторі литий спроби привести об'єкт до типу специфічного і генерує Exeption , якщо він зазнає невдачі.
Приклад:
StringBuilder b = (StringBuilder)someObject.
isне перевіряє, чи може об’єкт бути переданий певному типу. Ціле число приводить до великого штрафу, але 10 is longє помилковим.
(long)some_integerне вдасться? Я впевнений, що ми обидва знаємо, що це неправда, навіть не запустивши її, тому поясніть, що ви маєте на увазі.
is : « Зверніть увагу , що є . Оператор враховує тільки посилальні перетворення, бокс перетворення і перетворення розпакування Інші перетворення, такі як визначені користувачем перетворення, які не зважають на. » (Msdn.microsoft.com/en-us/library/scekt9xw .aspx). Проas : « Зверніть увагу , що , як .. Оператор виконує тільки посилання на перетворення, обнуляє конверсії і бокс конверсій , як оператор не може виконувати інші перетворення, такі як певні користувачем перетворення, які замість цього повинні бути виконані за допомогою литих виразів » ( MSDN .microsoft.com / en-us / library / cscsdfbt.aspx )
Різниця між ІС і Як полягає в тому, що ..
IS - чи Оператор використовується для перевірки сумісності об'єкта із заданим типом, і він повертає результат як булева (справжня чи помилкова).
AS - Оператор використовується для кастингу об'єктів для даного типу або класу.
Вих.
Student s = obj as Student;
еквівалентно:
Student s = obj is Student ? (Student)obj : (Student)null;
isможна виразити за допомогою asі asможна виразити за допомогою is. Ось як зробити isз asключовим словом. Bool b = obj is Student; еквівалентно: Bool b = (obj as Student) != null; Більше про це тут
І ключові слова, isі asключові слова використовуються для кастингу типів у C #.
Якщо ви подивитесь на IL код звичаїв обох ключових слів, ви легко зрозумієте різницю.
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
}
Іл-код (для вищевказаного C #-коду є додане зображення):
Код IL для isвикористання ключових слів містить інструкції ІЛ isinstaі castclass.
Але код IL для asвикористання ключових слів є лише isinsta.
У вищезгаданому використанні два типи даних будуть використовуватись там, де isвикористовується ключове слово, і лише один типкаст, де asвикористовується ключове слово.
Примітка: Якщо ви використовуєте isключове слово для перевірки певного стану і не маєте інтересу до результату typecast, тоді буде лише один typecast, тобто
if (baseclassInstance is DerivedClass)
{
// do something based on the condition check.
}
isа asключові слова будуть використовуватися залежно від необхідності.
Ключове слово is перевіряє, чи є значення на його лівій стороні екземпляром типу праворуч. Наприклад:
if(obj is string)
{
...
}
Зауважте, що в цьому випадку вам доведеться використовувати додатковий явний формат, щоб отримати obj як рядок.
Ключове слово as використовується для виведення типів, що змінюються. Якщо вказане значення не є примірником вказаного типу, нуль повертається. Наприклад:
string str = obj as string;
if(str != null)
{
...
}
Я б сказав: читайте MSDN в Інтернеті, але ось це:
Оператор is перевіряє, чи об'єкт сумісний із заданим типом, а результат оцінки булевий: true чи false.
Оператор as ніколи не кине виняток.
Чи оператор, акторський склад, повертає true, якщо це вдасться. Якщо повернення не вдалося, він поверне помилкове значення. З його допомогою ви не можете захопити перетворену змінну. Цей оператор є найбільш корисним при перевірці типів у if-операторах та виразах. Це приведення ідеально підходить лише в тому випадку, коли отримана змінна не буде потрібна для подальшого використання
Як це акторський склад. З його допомогою ми отримуємо продуктивність і уникаємо винятків, коли акторський склад недійсний. Null повертається, коли акторський склад неможливий. Для референтних типів рекомендується використовувати асид. Це і швидко, і безпечно. Ми можемо протестувати отриману змінну проти нуля, а потім використати її. Це виключає зайві ролі
ОПЕРАТОР Оператор в C # використовується для перевірки типу об'єкта, і він повертає значення bool: true, якщо об'єкт одного типу, а false - якщо ні. або також Оператор "є" використовується для перевірки, чи сумісний тип об'єкта з заданим типом чи ні. Для об’єктів з нульовим значенням він повертає помилкові, наприклад
if(obj is AnimalObject)
{
//Then Work
}
як ОПЕРАТОР
Оператор виконує ту саму роботу, що і оператор, але різниця полягає замість bool, він повертає об'єкт, якщо вони сумісні з цим типом, інакше він повертає null. В інших словах, оператор 'as' використовується для здійснення перетворень між сумісними типи.
напр
Type obj = Object as Type;
Переваги "над" є у випадку, якщо оператор, щоб набрати ролі, нам потрібно зробити два етапи:
Check the Type using is
If it’s true then Type cast
Насправді це впливає на продуктивність, оскільки кожен раз, коли CLR буде проходити через ієрархію спадкування, перевіряючи кожен базовий тип на вказаний тип.
Щоб уникнути цього, використовуйте як, це буде робити це за один крок. Тільки для перевірки типу ми повинні використовувати оператор.
is: Оператор is використовується для перевірки, чи сумісний тип об’єкта з заданим типом
as: Оператор "Ас" використовується для здійснення перетворень між сумісними типами.
object s = "this is a test";
string str=string.Empty;
if( s is string)
str = s as string;
isтоді asце дорого : він розпаковується двічі. Для довідкових типів слід просто зробити as, а потім перевірити наявність нуля, щоб перевірити, чи працює він.
Подивіться нижче на відео YouTube, яке пояснює різницю більш показовим та наочним способом: -
https://www.youtube.com/watch?v=IKmRtJcRX_I
Нижче йде довга відповідь з поясненням коду.
Ключове слово "IS" корисно перевірити, чи об'єкти сумісні з типом. Наприклад, у наведеному нижче коді ми перевіряємо, чи об’єкт “ocust” є класом “Клієнт”.
object ocust = new Customer();
if (ocust is Customer)
{
Ключове слово "AS" допомагає здійснити перетворення одного типу в інший. Наприклад, у наведеному нижче коді ми перетворюємо об’єкт у тип рядкових даних. Якщо ключове слово "AS" не в змозі ввести команду cast, воно повертає NULL.
object o = "somestring";
string str = o as string;
IS Ключове слово -> перевіряє, чи відповідає тип заданого об'єкта новому типу об'єкта. Це ніколи не кидає виняток. Це булевий тип. Повертається істинно або помилково
`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 Ключове слово: перевіряє, чи відповідає тип заданого об'єкта новому типу об'єкта. Він повертає ненульове значення, якщо даний об'єкт сумісний з новим, а інший - null. Це призводить до виключення.
`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`
Обидва оператори використовуються для лиття безпечного типу.
ЯК Оператор:
Оператор AS також перевіряє, чи відповідає тип заданого об'єкта новому типу об'єкта. Це ключове слово перевірить, чи сумісний тип даного об'єкта з новим типом об’єкта. Якщо він не сумісний з новим, він поверне NULL.
IS Оператор:
Цей Оператор перевіряє, чи сумісний тип об'єкта з новим об'єктом. Якщо він сумісний, він повертає істинне інакше хибне.