оператор is / оператор as

is — позволяет определить, имеет ли объект совместимость с заданным типом.
as — выполняет операцию приведения типов объекта к заданному типу, не генерирую исключения, в случае, если объект и заданный тип являются не совместимыми.
базовый класс производный класс
One { } Two : One { }
One O = new One(); Two T = new Two();
One O = new Two(); Two T = new One();

оператор is

Скрыть

Показать

Копировать
  Main.cs  
  • using System;
  •  
  • class One {
  •  public int A {set; get;}
  • }
  •  
  • class Two : One {
  •  public int B {set; get;}
  • }
  •  
  • class Program {
  •  public static int Main() {
  •   One O = new One();
  •   Two T = new Two();
  •   One OO = new Two();//можно
  •    
  •   if(O is Two) {
  •    Console.WriteLine("T=(Two)O --- тип O привести к типу Two --- МОЖНО");
  •    T = (Two)O;
  •   }
  •   else {
  •    Console.WriteLine("T=(Two)O --- тип O привести к типу Two --- НЕЛЬЗЯ");//нельзя
  •   }
  •  
  •   if(T is One) {
  •    Console.WriteLine("O=(One)T --- тип T привести к типу One --- МОЖНО");//можно
  •    O = (One)T;
  •     
  •   }
  •   else {
  •    Console.WriteLine("O=(One)T --- тип T привести к типу One --- НЕЛЬЗЯ");
  •   }
  •    
  •   Console.ReadKey();
  •   return 0;
  •  }
  • }
T=(Two)O --- тип O привести к типу Two --- НЕЛЬЗЯ
O=(One)T --- тип T привести к типу One --- МОЖНО

оператор as

Скрыть

Показать

Копировать
  Main.cs  
  • using System;
  •  
  • class One {
  •  public int A {set; get;}
  • }
  •  
  • class Two : One {
  •  public int B {set; get;}
  • }
  •  
  • class Program {
  •  public static int Main() {
  •   One O = new One();
  •   Two T = new Two();
  •  
  •   T = O as Two;
  •   if(T == null) {
  •    Console.WriteLine("T=(Two)O --- тип O привести к типу Two --- НЕЛЬЗЯ");//нельзя
  •   }
  •   else {
  •    Console.WriteLine("T=(Two)O --- тип O привести к типу Two --- МОЖНО");
  •   }
  •  
  •   One OO = new One();
  •   Two TT = new Two();
  •  
  •   OO = TT as One;
  •   if(OO == null) {
  •    Console.WriteLine("OO=(One)TT --- тип TT привести к типу One --- НЕЛЬЗЯ");
  •   }
  •   else {
  •    Console.WriteLine("OO=(One)TT --- тип TT привести к типу One --- МОЖНО");//можно
  •   }
  •    
  •   Console.ReadKey();
  •   return 0;
  •  }
  • }
T=(Two)O --- тип O привести к типу Two --- НЕЛЬЗЯ
OO=(One)TT --- тип TT привести к типу One --- МОЖНО