Ковариантность массивов в C#

Существует один тип неявного приведения, доступного в С#, которое реализовать в С++ не просто — главным образом, из-за семантики значений по умолчанию в С++.

Массив одного ссылочного типа можно неявно преобразовывать в массив другого ссылочного типа до тех пор, пока целевой ссылочный тип допускает неявное преобразование от исходного ссылочного типа, и массивы имеют одинаковую размерность. Это называется ковариантностью массивов. Например, следующее преобразование совершенно законно:

1
2
3
4
5
6
7
8
public class EntryPoint {
static void Main()  {
string [] names = new string[4];
object[] objects = names; // оператор с неявным преобразованием
string[] originalNames =
(string[]) objects;       // оператор с явным преобразованием
}
}

Поскольку System. String наследуется от System.Object и, следовательно, неявно преобразуем к System.Object, такое неявное преобразование массива string по имени names в массив object по имени objects возможно. Однако, как показано, для обратного преобразования необходимо явное приведение, которое может сгенерировать исключение в случае неудачи.

Имейте в виду, что неявные преобразования аргументов могут происходить при вызове метода, если аргументы должны быть преобразованы для соответствия типам параметров. Если выполнить преобразование неявно не удается, придется выполнить явное приведение.

Вы можете следить за любыми ответами на эту запись через RSS 2.0 ленту. Вы можете оставить ответ, или trackback с вашего собственного сайта.

Оставьте отзыв

XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

 
Rambler's Top100