Типы в C#. Приведение типов

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

Главной особенностью С# является безопасность типов. CLR всегда известен тип объекта. Тип всегда можно узнать при помощи метода GetType(), так как это не виртуальный метод, никакой объект не сможет сообщить о себе ложной информации. В C# приведение объекта к одному из базовых типов может выполняться неявно, так как компилятор считает такое преобразование безопасным, и при нем возможность возникновения ошибки практически исключается. Но в случае приведения типа к одному из производных типов, такое преобразование необходимо осуществлять явным образом, так как оно не безопасно и может привести к ошибки.

namespace ConsoleApplication2

{

class Program

{

static void Main(string[] args)

{

Person p = new Person();

Object o = new Person();//не явное преобразование типа

Person p1 = (Person)o;//яное преобразование

}

}

public class Person{}

}

В вышеуказанном примере мы неявно сначала преобразуем объект типа Person к типу Object, так как Object является базовым классом. Во втором случае нам необходимо выполнить явное преобразование.

Теперь рассмотрим поведение CLR во время выполнения кода с точки зрения приведения типов.

namespace ConsoleApplication2

{

class Program

{

public static Person returnPerson(Object o)

{

Person p = (Person)o;

return p;

}

static void Main(string[] args)

{

Manager m = new Manager();

DateTime date = new DateTime();

returnPerson(m);//Ok

returnPerson(date);//Error

}

}

public class Person{}

public class Manager : Person { }

}

Рассмотрим данную программу. Мы создали класс Manager, который является потомком класса Person, и метод returnPerson. Данный код скомпилируется, так как и Manager и DateTime являются потомками Object и могут быть переданы в качестве параметра для нашего метода. При первом вызове метода returnPerson ошибки не произойдет, так как класс Manager является потомком класса Person и преобразование выполнится корректно, но во втором случае мы получим исключение, так как мы не можем преобразовать тип  DateTime в тип Person.

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

  • на Delphi

  • на Java

  • на C++