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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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 чаще всего используют в случае:

1
2
3
4
if (o is Manager)
            {
                Manager man = (Manager)o;
            }

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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++