Приведение типов в C#. Операторы is и as.

C#   3 февраля 2012  Автор статьи:  

Оператор is проверяет совместимость объекта с данным типом. Соответственно в качестве результата он выдает значение типа Boolean. Одной из главных особенностей данного оператора то, что он никогда не генерирует исключение.

namespace ConsoleApplication2
{
class Program
{

static void Main(string[] args)
{

Manager m = new Manager();
Object o = new object();
bool b = o is Manager;//False
bool b1 = o is object;//True
}

}
public class Person{}
public class Manager : Person { }
}

В первом случае переменная b примет значение false. Так как o не является объектом типа Manager, а имеет тип Object, поэтому переменная b1 в нашем примере примет значение true.
На практике оператор is чаще всего используют в случае:

if (o is Manager)
{
Manager man = (Manager)o;
}

То есть сначала мы проверяем, имеет ли объект нужный нам тип, а потом осуществляем приведение типов. Но так как данный участок кода приходится использовать довольно часто, в C# был введен оператор as.

namespace ConsoleApplication2
{
class Program
{

static void Main(string[] args)
{

Manager m = new Manager();
Object o = new object();
Manager man = o as Manager;
if(man != null)
{
//тело условного оператора
}

}
public class Person{}
public class Manager : Person { }
}

В данном примере оператор проверяет совместимость объекта o с типом Manager, если объект совместим, оператор вернет ссылку на объект, если же нет, то он вернет null. В нашем случае мы получим null, так как объект o не совместим с типом Manager. Очень важно то, что благодаря оператору as, мы можем делать проверку типа только один раз, а потом просто сравнивать с null, в то время как при использовании is нам фактически дважды приходится проверять тип. Это затрачивает очень много ресурсов.

Научиться программировать

  • на Delphi

  • на Java

  • на C++